]> git.baikalelectronics.ru Git - kernel.git/commit
NFS4: avoid underflow when converting error to pointer.
authorNeilBrown <neilb@suse.de>
Mon, 17 Sep 2012 06:46:34 +0000 (16:46 +1000)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 25 Sep 2012 14:38:54 +0000 (10:38 -0400)
commitfab59e0116fe7cd0e239a6cae8149f8aee1d6e62
tree09f58145bc10308f4672ee156a0ed23ea87c4f7b
parentaa25d3bca96f1365eca815857022e014da76fb55
NFS4: avoid underflow when converting error to pointer.

In nfs4_create_sec_client, 'flavor' can hold a negative error
code (returned from nfs4_negotiate_security), even though it
is an 'enum' and hence unsigned.

The code is careful to cast it to an (int) before testing if it
is negative, however it doesn't cast to an (int) before calling
ERR_PTR.

On a machine where "void*" is larger than "int", this results in
the unsigned equivalent of -1 (e.g. 0xffffffff) being converted
to a pointer.  Subsequent code determines that this is not
negative, and so  dereferences it with predictable results.

So: cast 'flavor' to a (signed) int before passing to ERR_PTR.

cc: Benny Halevy <bhalevy@tonian.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4namespace.c