• Xin Long's avatar
    netfilter: ipt_CLUSTERIP: check duplicate config when initializing · 6c5d5cfb
    Xin Long authored
    Now when adding an ipt_CLUSTERIP rule, it only checks duplicate config in
    clusterip_config_find_get(). But after that, there may be still another
    thread to insert a config with the same ip, then it leaves proc_create_data
    to do duplicate check.
    
    It's more reasonable to check duplicate config by ipt_CLUSTERIP itself,
    instead of checking it by proc fs duplicate file check. Before, when proc
    fs allowed duplicate name files in a directory, It could even crash kernel
    because of use-after-free.
    
    This patch is to check duplicate config under the protection of clusterip
    net lock when initializing a new config and correct the return err.
    
    Note that it also moves proc file node creation after adding new config, as
    proc_create_data may sleep, it couldn't be called under the clusterip_net
    lock. clusterip_config_find_get returns NULL if c->pde is null to make sure
    it can't be used until the proc file node creation is done.
    Suggested-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    6c5d5cfb
ipt_CLUSTERIP.c 19.5 KB