mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 18:56:24 +00:00
RDMA/iwpm: Rely on the rdma_nl_[un]register() to ensure that requests are valid
The core netlink code alread guarentees that no netlink callback can be running outside the rdma_nl_register/unregister() region and this registration happens during module init/exit. Thus it is already prevented that iwpm_valid_client() can ever fail. Remove it. Link: https://lore.kernel.org/r/a9f05a78f9996bf6ea47099b5e02671bf742f5ab.1627048781.git.leonro@nvidia.com Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
bdb0e4e3ff
commit
bbafcbc2b1
@ -69,10 +69,6 @@ int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client)
|
||||
const char *err_str = "";
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
err_str = "Invalid port mapper client";
|
||||
goto pid_query_error;
|
||||
}
|
||||
if (iwpm_check_registration(nl_client, IWPM_REG_VALID) ||
|
||||
iwpm_user_pid == IWPM_PID_UNAVAILABLE)
|
||||
return 0;
|
||||
@ -153,10 +149,6 @@ int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
|
||||
const char *err_str = "";
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
err_str = "Invalid port mapper client";
|
||||
goto add_mapping_error;
|
||||
}
|
||||
if (!iwpm_valid_pid())
|
||||
return 0;
|
||||
if (!iwpm_check_registration(nl_client, IWPM_REG_VALID)) {
|
||||
@ -240,10 +232,6 @@ int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
|
||||
const char *err_str = "";
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
err_str = "Invalid port mapper client";
|
||||
goto query_mapping_error;
|
||||
}
|
||||
if (!iwpm_valid_pid())
|
||||
return 0;
|
||||
if (!iwpm_check_registration(nl_client, IWPM_REG_VALID)) {
|
||||
@ -331,10 +319,6 @@ int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client)
|
||||
const char *err_str = "";
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
err_str = "Invalid port mapper client";
|
||||
goto remove_mapping_error;
|
||||
}
|
||||
if (!iwpm_valid_pid())
|
||||
return 0;
|
||||
if (iwpm_check_registration(nl_client, IWPM_REG_UNDEF)) {
|
||||
@ -444,8 +428,7 @@ int iwpm_register_pid_cb(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
|
||||
pr_debug("%s: iWarp Port Mapper (pid = %d) is available!\n",
|
||||
__func__, iwpm_user_pid);
|
||||
if (iwpm_valid_client(nl_client))
|
||||
iwpm_set_registration(nl_client, IWPM_REG_VALID);
|
||||
iwpm_set_registration(nl_client, IWPM_REG_VALID);
|
||||
register_pid_response_exit:
|
||||
nlmsg_request->request_done = 1;
|
||||
/* always for found nlmsg_request */
|
||||
@ -649,11 +632,6 @@ int iwpm_remote_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
return ret;
|
||||
|
||||
nl_client = RDMA_NL_GET_CLIENT(cb->nlh->nlmsg_type);
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
pr_info("%s: Invalid port mapper client = %u\n",
|
||||
__func__, nl_client);
|
||||
return ret;
|
||||
}
|
||||
atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
|
||||
|
||||
local_sockaddr = (struct sockaddr_storage *)
|
||||
@ -736,11 +714,6 @@ int iwpm_mapping_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
return ret;
|
||||
}
|
||||
nl_client = RDMA_NL_GET_CLIENT(cb->nlh->nlmsg_type);
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
pr_info("%s: Invalid port mapper client = %u\n",
|
||||
__func__, nl_client);
|
||||
return ret;
|
||||
}
|
||||
iwpm_set_registration(nl_client, IWPM_REG_INCOMPL);
|
||||
atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
|
||||
iwpm_user_pid = cb->nlh->nlmsg_pid;
|
||||
@ -863,11 +836,6 @@ int iwpm_hello_cb(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
}
|
||||
abi_version = nla_get_u16(nltb[IWPM_NLA_HELLO_ABI_VERSION]);
|
||||
nl_client = RDMA_NL_GET_CLIENT(cb->nlh->nlmsg_type);
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
pr_info("%s: Invalid port mapper client = %u\n",
|
||||
__func__, nl_client);
|
||||
return ret;
|
||||
}
|
||||
iwpm_set_registration(nl_client, IWPM_REG_INCOMPL);
|
||||
atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
|
||||
iwpm_ulib_version = min_t(u16, IWPM_UABI_VERSION, abi_version);
|
||||
|
@ -70,7 +70,6 @@ int iwpm_init(u8 nl_client)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
iwpm_set_valid(nl_client, 1);
|
||||
iwpm_set_registration(nl_client, IWPM_REG_UNDEF);
|
||||
pr_debug("%s: Mapinfo and reminfo tables are created\n", __func__);
|
||||
return 0;
|
||||
@ -90,7 +89,6 @@ int iwpm_exit(u8 nl_client)
|
||||
free_hash_bucket();
|
||||
free_reminfo_bucket();
|
||||
pr_debug("%s: Resources are destroyed\n", __func__);
|
||||
iwpm_set_valid(nl_client, 0);
|
||||
iwpm_set_registration(nl_client, IWPM_REG_UNDEF);
|
||||
return 0;
|
||||
}
|
||||
@ -115,8 +113,6 @@ int iwpm_create_mapinfo(struct sockaddr_storage *local_sockaddr,
|
||||
unsigned long flags;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!iwpm_valid_client(nl_client))
|
||||
return ret;
|
||||
map_info = kzalloc(sizeof(struct iwpm_mapping_info), GFP_KERNEL);
|
||||
if (!map_info)
|
||||
return -ENOMEM;
|
||||
@ -276,10 +272,6 @@ int iwpm_get_remote_info(struct sockaddr_storage *mapped_loc_addr,
|
||||
unsigned long flags;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!iwpm_valid_client(nl_client)) {
|
||||
pr_info("%s: Invalid client = %u\n", __func__, nl_client);
|
||||
return ret;
|
||||
}
|
||||
spin_lock_irqsave(&iwpm_reminfo_lock, flags);
|
||||
if (iwpm_reminfo_bucket) {
|
||||
hash_bucket_head = get_reminfo_hash_bucket(
|
||||
@ -394,16 +386,6 @@ int iwpm_get_nlmsg_seq(void)
|
||||
return atomic_inc_return(&iwpm_admin.nlmsg_seq);
|
||||
}
|
||||
|
||||
int iwpm_valid_client(u8 nl_client)
|
||||
{
|
||||
return iwpm_admin.client_list[nl_client];
|
||||
}
|
||||
|
||||
void iwpm_set_valid(u8 nl_client, int valid)
|
||||
{
|
||||
iwpm_admin.client_list[nl_client] = valid;
|
||||
}
|
||||
|
||||
/* valid client */
|
||||
u32 iwpm_get_registration(u8 nl_client)
|
||||
{
|
||||
|
@ -91,7 +91,6 @@ struct iwpm_remote_info {
|
||||
|
||||
struct iwpm_admin_data {
|
||||
atomic_t nlmsg_seq;
|
||||
int client_list[RDMA_NL_NUM_CLIENTS];
|
||||
u32 reg_list[RDMA_NL_NUM_CLIENTS];
|
||||
};
|
||||
|
||||
@ -146,22 +145,6 @@ int iwpm_get_nlmsg_seq(void);
|
||||
*/
|
||||
void iwpm_add_remote_info(struct iwpm_remote_info *reminfo);
|
||||
|
||||
/**
|
||||
* iwpm_valid_client - Check if the port mapper client is valid
|
||||
* @nl_client: The index of the netlink client
|
||||
*
|
||||
* Valid clients need to call iwpm_init() before using
|
||||
* the port mapper
|
||||
*/
|
||||
int iwpm_valid_client(u8 nl_client);
|
||||
|
||||
/**
|
||||
* iwpm_set_valid - Set the port mapper client to valid or not
|
||||
* @nl_client: The index of the netlink client
|
||||
* @valid: 1 if valid or 0 if invalid
|
||||
*/
|
||||
void iwpm_set_valid(u8 nl_client, int valid);
|
||||
|
||||
/**
|
||||
* iwpm_check_registration - Check if the client registration
|
||||
* matches the given one
|
||||
|
Loading…
x
Reference in New Issue
Block a user