Patch "infiniband/uverbs: Fix integer overflows" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
infiniband/uverbs: Fix integer overflows
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
infiniband-uverbs-fix-integer-overflows.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Mar 22 14:57:32 CET 2018
From: Vlad Tsyrklevich <[email protected]>
Date: Fri, 24 Mar 2017 15:55:17 -0400
Subject: infiniband/uverbs: Fix integer overflows
From: Vlad Tsyrklevich <[email protected]>
[ Upstream commit 4f7f4dcfff2c19debbcdbcc861c325610a15e0c5 ]
The 'num_sge' variable is verfied to be smaller than the 'sge_count' variable; however, since both are user-controlled it's possible to cause an integer overflow for the kmalloc multiply on 32-bit platforms (num_sge and sge_count are both defined u32). By crafting an input that causes a smaller-than-expected allocation it's possible to write controlled data out-of-bounds.
--- drivers/infiniband/core/uverbs_cmd.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
drivers/infiniband/core/uverbs_cmd.c +12 -1
@@ -2436,9 +2436,13 @@ ssize_t ib_uverbs_destroy_qp(struct ib_ustatic void *alloc_wr (size_t wr_size,__u32 num_sge) { +if (num_sge >= (U32_MAX -ALIGN (wr_size,sizeof (struct ib_sge ))) / +sizeof (struct ib_sge )) +return NULL ; +return kmalloc (ALIGN (wr_size,sizeof (struct ib_sge )) + num_sge *sizeof (struct ib_sge ),GFP_KERNEL ); -}; +} ssize_t ib_uverbs_post_send(struct ib_uverbs_file *file, struct ib_device *ib_dev,
@@ -2664,6 +2668,13 @@ static struct ib_recv_wr *ib_uverbs_unma ret = -EINVAL ; goto err; } + +if (user_wr->num_sge >= + (U32_MAX -ALIGN (sizeof *next,sizeof (struct ib_sge ))) / +sizeof (struct ib_sge )) { + ret = -EINVAL ; + goto err; + } next = kmalloc(ALIGN(sizeof *next, sizeof (struct ib_sge)) + user_wr->num_sge * sizeof (struct ib_sge),
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/infiniband-uverbs-fix-integer-overflows.patch