• Jon Maloy's avatar
    tipc: fix use-after-free in tipc_nametbl_stop · be47e41d
    Jon Maloy authored
    When we delete a service item in tipc_nametbl_stop() we loop over
    all service ranges in the service's RB tree, and for each service
    range we loop over its pertaining publications while calling
    tipc_service_remove_publ() for each of them.
    
    However, tipc_service_remove_publ() has the side effect that it also
    removes the comprising service range item when there are no publications
    left. This leads to a "use-after-free" access when the inner loop
    continues to the next iteration, since the range item holding the list
    we are looping no longer exists.
    
    We fix this by moving the delete of the service range item outside
    the said function. Instead, we now let the two functions calling it
    test if the list is empty and perform the removal when that is the
    case.
    
    Reported-by: syzbot+d64b64afc55660106556@syzkaller.appspotmail.com
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    be47e41d
name_table.c 26.5 KB