• Florian Westphal's avatar
    xfrm: policy: fix policy hash rebuild · 88584c30
    Florian Westphal authored
    Dan Carpenter reports following static checker warning:
     net/xfrm/xfrm_policy.c:1316 xfrm_hash_rebuild()
     warn: 'dir' is out of bounds '3' vs '2'
    
     |  1280          /* reset the bydst and inexact table in all directions */
     |  1281          xfrm_hash_reset_inexact_table(net);
     |  1282
     |  1283          for (dir = 0; dir < XFRM_POLICY_MAX; dir++) {
     |                              ^^^^^^^^^^^^^^^^^^^^^
     |dir == XFRM_POLICY_MAX at the end of this loop.
     |  1304          /* re-insert all policies by order of creation */
     |  1305          list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) {
     [..]
     |  1314                                            xfrm_policy_id2dir(policy->index));
     |  1315                  if (!chain) {
     |  1316                          void *p = xfrm_policy_inexact_insert(policy, dir, 0);
    
    Fix this by updating 'dir' based on current policy.  Otherwise, the
    inexact policies won't be found anymore during lookup, as they get
    hashed to a bogus bin.
    Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Fixes: cc1bb845 ("xfrm: policy: return NULL when inexact search needed")
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
    88584c30
xfrm_policy.c 101 KB