]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Check for over/underflow while allocating PTS ids
authorBen Kaduk <kaduk@mit.edu>
Wed, 17 Jul 2013 00:39:56 +0000 (20:39 -0400)
committerStephan Wiesand <stephan.wiesand@desy.de>
Fri, 13 Sep 2013 18:24:17 +0000 (11:24 -0700)
The behavior of signed integer over/underflow is implementation-defined,
but even if the compiler is nice and just wraps around, we could get
ourselves into trouble later on.

Reviewed-on: http://gerrit.openafs.org/10091
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
(cherry picked from commit 6c7c185ba3ec6fbdda0651d18868e66edd655809)

Change-Id: I1feb1879cce064760ae061538215b22b6fd55933
Reviewed-on: http://gerrit.openafs.org/10124
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/ptserver/utils.c

index 822df99486acb61ba4316420a361ed3b0588cb87..18b0ccb5939c471c55cf53bed8176b61647ebfcd 100644 (file)
@@ -349,7 +349,8 @@ AllocID(struct ubik_trans *at, afs_int32 flag, afs_int32 *aid)
 
     if (flag & PRGRP) {
        *aid = ntohl(cheader.maxGroup);
-       while (code && i < maxcount) {
+       /* Check for PRBADID to avoid wrap-around. */
+       while (code && i < maxcount && *aid != PRBADID) {
            --(*aid);
            code = FindByID(at, *aid);
            i++;
@@ -381,7 +382,7 @@ AllocID(struct ubik_trans *at, afs_int32 flag, afs_int32 *aid)
        return PRSUCCESS;
     } else {
        *aid = ntohl(cheader.maxID);
-       while (code && i < maxcount) {
+       while (code && i < maxcount && *aid != 0x7fffffff) {
            ++(*aid);
            code = FindByID(at, *aid);
            i++;