Skip to content
  • Dan Carpenter's avatar
    XArray: Fix an arithmetic error in xa_is_err · edcddd4c
    Dan Carpenter authored
    There is a math problem here which leads to a lot of static checker
    warnings for me:
    
    net/sunrpc/clnt.c:451 rpc_new_client() error: (-4096) too low for ERR_PTR
    
    Error values are from -1 to -4095 or from 0xffffffff to 0xfffff001 in
    hexadecimal.  (I am assuming a 32 bit system for simplicity).  We are
    using the lowest two bits to hold some internal XArray data so the
    error is shifted two spaces to the left.  0xfffff001 << 2 is 0xffffc004.
    And finally we want to check that BIT(1) is set so we add 2 which gives
    us 0xffffc006.
    
    In other words, we should be checking that "entry >= 0xffffc006", but
    the check is actually testing if "entry >= 0xffffc002".
    
    Fixes: 76b4e529
    
     ("XArray: Permit storing 2-byte-aligned pointers")
    Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    [Use xa_mk_internal() instead of changing the bracketing]
    Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
    edcddd4c