On Tue, Nov 27, 2018 at 01:28:54PM +0100, Florian Westphal wrote:
> 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: Dan Carpenter <dan.carpen...@oracle.com>
> Fixes: cc1bb845adc9 ("xfrm: policy: return NULL when inexact search needed")
> Signed-off-by: Florian Westphal <f...@strlen.de>

Applied, thanks Florian!

Reply via email to