On Mon, Aug 10, 2015 at 10:46:55PM -0400, [email protected] wrote:
> From: Ira Weiny <[email protected]>
> 
> The recently added SA Netlink service requires admin privileges to receive
> kernel requests.  This is only partially sufficient to protect the kernel from
> malicious users.  This patch fixes two issues.
> 
>       1) Path responses from user space could be spoofed if the sequence
>          number was properly guessed.
>       2) The set timeout request message could be issued by any user.
> 
> Ignore these messages if not submitted by an admin user.
> 
> Fixes: 6619209af36c ("IB/sa: Route SA pathrecord query through netlink")
> Signed-off-by: Ira Weiny <[email protected]>
> 
> ---
> Changes from V1:
>       Use netlink_net_capable rather than ns_capable

Doug,

As per the thread with the V1 patch we are looking to merge this into a v9 of
Kaikes series once we do some more testing with the netlink_bind and
namespaces.

So you can safely ignore both v1 and this patch.

Thanks,
Ira

> 
> Doug let me know if you would prefer that I get Kaike to squash this into the
> original patch.
> 
>  drivers/infiniband/core/sa_query.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/infiniband/core/sa_query.c 
> b/drivers/infiniband/core/sa_query.c
> index 70ceec4df02a..6778644a6957 100644
> --- a/drivers/infiniband/core/sa_query.c
> +++ b/drivers/infiniband/core/sa_query.c
> @@ -699,6 +699,12 @@ static int ib_nl_handle_set_timeout(struct sk_buff *skb,
>       struct nlattr *tb[LS_NLA_TYPE_MAX + 1];
>       int ret;
>  
> +     if (!netlink_net_capable(skb, CAP_NET_ADMIN)) {
> +             pr_warn_ratelimited("SA netlink: invalid perm for set timeout: 
> `%s'.\n",
> +                                 current->comm);
> +             return -EPERM;
> +     }
> +
>       ret = nla_parse(tb, LS_NLA_TYPE_MAX, nlmsg_data(nlh), nlmsg_len(nlh),
>                       NULL);
>       attr = (const struct nlattr *)tb[LS_NLA_TYPE_TIMEOUT];
> @@ -706,6 +712,9 @@ static int ib_nl_handle_set_timeout(struct sk_buff *skb,
>               goto settimeout_out;
>  
>       timeout = *(int *) nla_data(attr);
> +
> +     pr_info("SA netlink: timeout: %d\n", timeout);
> +
>       if (timeout < IB_SA_LOCAL_SVC_TIMEOUT_MIN)
>               timeout = IB_SA_LOCAL_SVC_TIMEOUT_MIN;
>       if (timeout > IB_SA_LOCAL_SVC_TIMEOUT_MAX)
> @@ -754,6 +763,12 @@ static int ib_nl_handle_resolve_resp(struct sk_buff *skb,
>       int found = 0;
>       int ret;
>  
> +     if (!netlink_net_capable(skb, CAP_NET_ADMIN)) {
> +             pr_warn_ratelimited("SA netlink: invalid perm for response: 
> `%s'.\n",
> +                                 current->comm);
> +             return -EPERM;
> +     }
> +
>       spin_lock_irqsave(&ib_nl_request_lock, flags);
>       list_for_each_entry(query, &ib_nl_request_list, list) {
>               /*
> @@ -770,6 +785,7 @@ static int ib_nl_handle_resolve_resp(struct sk_buff *skb,
>  
>       if (!found) {
>               spin_unlock_irqrestore(&ib_nl_request_lock, flags);
> +             pr_err_ratelimited("SA netlink: got unmatched response\n");
>               goto resp_out;
>       }
>  
> -- 
> 1.8.2
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to