From: Doug Ledford <dledford@redhat.com>
To: gregkh@linuxfoundation.org, borisp@mellanox.com,
alexpo@mellanox.com, kliteyn@mellanox.com, leon@kernel.org,
security@kernel.org, stable@vger.kernel.org,
tziporet@mellanox.com
Subject: Re: FAILED: patch "[PATCH] RDMA/uverbs: Check port number supplied by user verbs cmds" failed to apply to 3.18-stable tree
Date: Fri, 07 Jul 2017 11:56:45 -0400 [thread overview]
Message-ID: <1499443005.2783.51.camel@redhat.com> (raw)
In-Reply-To: <14994160971168@kroah.com>
On Fri, 2017-07-07 at 10:28 +0200, gregkh@linuxfoundation.org wrote:
> The patch below does not apply to the 3.18-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git
> commit
> id to <stable@vger.kernel.org>.
We don't really need this patch on kernels prior to 4.4 (and I sent a
fix patch for kernels between 4.4 and 4.9, which are the other two
versions you support that it failed on). Really, the function that is
causing the kernel crash was new to v4.12, and so even though users
could send bad data to kernels prior to v4.12, the specific BUGs
referenced in this fix would not occur (but other bad things might).
For kernels prior to 4.4, we actually need significant changes to this
patch for it to even work (the two functions in question do not have
immediate access to ib_dev in kernels prior to 4.4, so checking the
port_num against the valid ports on the ib_dev becomes a much harder
task). Since the function causing the BUG doesn't exist on these
earlier kernels (and there are other redundant checks for valid port
numbers in earlier kernels, but those checks weren't sufficient in the
v4.12 kernels and later because we used the port_num before the checks
were run, thereby causing this bug), we can ignore this on earlier
kernels. Thanks.
> thanks,
>
> greg k-h
>
> ------------------ original commit in Linus's tree ------------------
>
> From 5ecce4c9b17bed4dc9cb58bfb10447307569b77b Mon Sep 17 00:00:00
> 2001
> From: Boris Pismenny <borisp@mellanox.com>
> Date: Tue, 27 Jun 2017 15:09:13 +0300
> Subject: [PATCH] RDMA/uverbs: Check port number supplied by user
> verbs cmds
>
> The ib_uverbs_create_ah() ind ib_uverbs_modify_qp() calls receive
> the port number from user input as part of its attributes and assumes
> it is valid. Down on the stack, that parameter is used to access
> kernel
> data structures. If the value is invalid, the kernel accesses memory
> it should not. To prevent this, verify the port number before using
> it.
>
> BUG: KASAN: use-after-free in ib_uverbs_create_ah+0x6d5/0x7b0
> Read of size 4 at addr ffff880018d67ab8 by task syz-executor/313
>
> BUG: KASAN: slab-out-of-bounds in modify_qp.isra.4+0x19d0/0x1ef0
> Read of size 4 at addr ffff88006c40ec58 by task syz-executor/819
>
> Fixes: 67cdb40ca444 ("[IB] uverbs: Implement more commands")
> Fixes: 189aba99e70 ("IB/uverbs: Extend modify_qp and support packet
> pacing")
> Cc: <stable@vger.kernel.org> # v2.6.14+
> Cc: <security@kernel.org>
> Cc: Yevgeny Kliteynik <kliteyn@mellanox.com>
> Cc: Tziporet Koren <tziporet@mellanox.com>
> Cc: Alex Polak <alexpo@mellanox.com>
> Signed-off-by: Boris Pismenny <borisp@mellanox.com>
> Signed-off-by: Leon Romanovsky <leon@kernel.org>
> Signed-off-by: Doug Ledford <dledford@redhat.com>
>
> diff --git a/drivers/infiniband/core/uverbs_cmd.c
> b/drivers/infiniband/core/uverbs_cmd.c
> index 70b7fb156414..e63f2a13c5e1 100644
> --- a/drivers/infiniband/core/uverbs_cmd.c
> +++ b/drivers/infiniband/core/uverbs_cmd.c
> @@ -1931,6 +1931,11 @@ static int modify_qp(struct ib_uverbs_file
> *file,
> goto out;
> }
>
> + if (!rdma_is_port_valid(qp->device, cmd->base.port_num)) {
> + ret = -EINVAL;
> + goto release_qp;
> + }
> +
> attr->qp_state = cmd->base.qp_state;
> attr->cur_qp_state = cmd->base.cur_qp_state;
> attr->path_mtu = cmd->base.path_mtu;
> @@ -2541,6 +2546,9 @@ ssize_t ib_uverbs_create_ah(struct
> ib_uverbs_file *file,
> if (copy_from_user(&cmd, buf, sizeof cmd))
> return -EFAULT;
>
> + if (!rdma_is_port_valid(ib_dev, cmd.attr.port_num))
> + return -EINVAL;
> +
> INIT_UDATA(&udata, buf + sizeof(cmd),
> (unsigned long)cmd.response + sizeof(resp),
> in_len - sizeof(cmd), out_len - sizeof(resp));
>
--
Doug Ledford <dledford@redhat.com>
GPG KeyID: B826A3330E572FDD
Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
prev parent reply other threads:[~2017-07-07 15:56 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-07 8:28 FAILED: patch "[PATCH] RDMA/uverbs: Check port number supplied by user verbs cmds" failed to apply to 3.18-stable tree gregkh
2017-07-07 15:56 ` Doug Ledford [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1499443005.2783.51.camel@redhat.com \
--to=dledford@redhat.com \
--cc=alexpo@mellanox.com \
--cc=borisp@mellanox.com \
--cc=gregkh@linuxfoundation.org \
--cc=kliteyn@mellanox.com \
--cc=leon@kernel.org \
--cc=security@kernel.org \
--cc=stable@vger.kernel.org \
--cc=tziporet@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox