lkml.org 
[lkml]   [2018]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 075/105] xfrm: Ignore socket policies when rebuilding hash tables
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Tobias Brunner <tobias@strongswan.org>

    commit 6916fb3b10b3cbe3b1f9f5b680675f53e4e299eb upstream.

    Whenever thresholds are changed the hash tables are rebuilt. This is
    done by enumerating all policies and hashing and inserting them into
    the right table according to the thresholds and direction.

    Because socket policies are also contained in net->xfrm.policy_all but
    no hash tables are defined for their direction (dir + XFRM_POLICY_MAX)
    this causes a NULL or invalid pointer dereference after returning from
    policy_hash_bysel() if the rebuild is done while any socket policies
    are installed.

    Since the rebuild after changing thresholds is scheduled this crash
    could even occur if the userland sets thresholds seemingly before
    installing any socket policies.

    Fixes: 53c2e285f970 ("xfrm: Do not hash socket policies")
    Signed-off-by: Tobias Brunner <tobias@strongswan.org>
    Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: Zubin Mithra <zsm@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/xfrm/xfrm_policy.c | 4 ++++
    1 file changed, 4 insertions(+)

    --- a/net/xfrm/xfrm_policy.c
    +++ b/net/xfrm/xfrm_policy.c
    @@ -626,6 +626,10 @@ static void xfrm_hash_rebuild(struct wor

    /* re-insert all policies by order of creation */
    list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) {
    + if (xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) {
    + /* skip socket policies */
    + continue;
    + }
    newpos = NULL;
    chain = policy_hash_bysel(net, &policy->selector,
    policy->family,

    \
     
     \ /
      Last update: 2018-07-01 18:20    [W:7.920 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site