Skip to content
  • Pablo Neira Ayuso's avatar
    6a0a8d10
    netfilter: nf_tables: use-after-free in failing rule with bound set · 6a0a8d10
    Pablo Neira Ayuso authored
    
    
    If a rule that has already a bound anonymous set fails to be added, the
    preparation phase releases the rule and the bound set. However, the
    transaction object from the abort path still has a reference to the set
    object that is stale, leading to a use-after-free when checking for the
    set->bound field. Add a new field to the transaction that specifies if
    the set is bound, so the abort path can skip releasing it since the rule
    command owns it and it takes care of releasing it. After this update,
    the set->bound field is removed.
    
    [   24.649883] Unable to handle kernel paging request at virtual address 0000000000040434
    [   24.657858] Mem abort info:
    [   24.660686]   ESR = 0x96000004
    [   24.663769]   Exception class = DABT (current EL), IL = 32 bits
    [   24.669725]   SET = 0, FnV = 0
    [   24.672804]   EA = 0, S1PTW = 0
    [   24.675975] Data abort info:
    [   24.678880]   ISV = 0, ISS = 0x00000004
    [   24.682743]   CM = 0, WnR = 0
    [   24.685723] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000428952000
    [   24.692207] [0000000000040434] pgd=0000000000000000
    [   24.697119] Internal error: Oops: 96000004 [#1] SMP
    [...]
    [   24.889414] Call trace:
    [   24.891870]  __nf_tables_abort+0x3f0/0x7a0
    [   24.895984]  nf_tables_abort+0x20/0x40
    [   24.899750]  nfnetlink_rcv_batch+0x17c/0x588
    [   24.904037]  nfnetlink_rcv+0x13c/0x190
    [   24.907803]  netlink_unicast+0x18c/0x208
    [   24.911742]  netlink_sendmsg+0x1b0/0x350
    [   24.915682]  sock_sendmsg+0x4c/0x68
    [   24.919185]  ___sys_sendmsg+0x288/0x2c8
    [   24.923037]  __sys_sendmsg+0x7c/0xd0
    [   24.926628]  __arm64_sys_sendmsg+0x2c/0x38
    [   24.930744]  el0_svc_common.constprop.0+0x94/0x158
    [   24.935556]  el0_svc_handler+0x34/0x90
    [   24.939322]  el0_svc+0x8/0xc
    [   24.942216] Code: 37280300 f9404023 91014262 aa1703e0 (f9401863)
    [   24.948336] ---[ end trace cebbb9dcbed3b56f ]---
    
    Fixes: f6ac8585 ("netfilter: nf_tables: unbind set in rule from commit path")
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    6a0a8d10
    netfilter: nf_tables: use-after-free in failing rule with bound set
    Pablo Neira Ayuso authored
    
    
    If a rule that has already a bound anonymous set fails to be added, the
    preparation phase releases the rule and the bound set. However, the
    transaction object from the abort path still has a reference to the set
    object that is stale, leading to a use-after-free when checking for the
    set->bound field. Add a new field to the transaction that specifies if
    the set is bound, so the abort path can skip releasing it since the rule
    command owns it and it takes care of releasing it. After this update,
    the set->bound field is removed.
    
    [   24.649883] Unable to handle kernel paging request at virtual address 0000000000040434
    [   24.657858] Mem abort info:
    [   24.660686]   ESR = 0x96000004
    [   24.663769]   Exception class = DABT (current EL), IL = 32 bits
    [   24.669725]   SET = 0, FnV = 0
    [   24.672804]   EA = 0, S1PTW = 0
    [   24.675975] Data abort info:
    [   24.678880]   ISV = 0, ISS = 0x00000004
    [   24.682743]   CM = 0, WnR = 0
    [   24.685723] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000428952000
    [   24.692207] [0000000000040434] pgd=0000000000000000
    [   24.697119] Internal error: Oops: 96000004 [#1] SMP
    [...]
    [   24.889414] Call trace:
    [   24.891870]  __nf_tables_abort+0x3f0/0x7a0
    [   24.895984]  nf_tables_abort+0x20/0x40
    [   24.899750]  nfnetlink_rcv_batch+0x17c/0x588
    [   24.904037]  nfnetlink_rcv+0x13c/0x190
    [   24.907803]  netlink_unicast+0x18c/0x208
    [   24.911742]  netlink_sendmsg+0x1b0/0x350
    [   24.915682]  sock_sendmsg+0x4c/0x68
    [   24.919185]  ___sys_sendmsg+0x288/0x2c8
    [   24.923037]  __sys_sendmsg+0x7c/0xd0
    [   24.926628]  __arm64_sys_sendmsg+0x2c/0x38
    [   24.930744]  el0_svc_common.constprop.0+0x94/0x158
    [   24.935556]  el0_svc_handler+0x34/0x90
    [   24.939322]  el0_svc+0x8/0xc
    [   24.942216] Code: 37280300 f9404023 91014262 aa1703e0 (f9401863)
    [   24.948336] ---[ end trace cebbb9dcbed3b56f ]---
    
    Fixes: f6ac8585 ("netfilter: nf_tables: unbind set in rule from commit path")
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
Loading