All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Yann Droneaud <ydroneaud@opteya.com>,
	Roland Dreier <roland@purestorage.com>
Subject: [PATCH 3.14 22/59] IB/mlx5: add missing padding at end of struct mlx5_ib_create_cq
Date: Fri,  4 Jul 2014 15:19:11 -0700	[thread overview]
Message-ID: <20140704221540.603601563@linuxfoundation.org> (raw)
In-Reply-To: <20140704221539.544876024@linuxfoundation.org>

3.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Yann Droneaud <ydroneaud@opteya.com>

commit a8237b32a3faab155a5dc8f886452147ce73da3e upstream.

The i386 ABI disagrees with most other ABIs regarding alignment of
data type larger than 4 bytes: on most ABIs a padding must be added at
end of the structures, while it is not required on i386.

So for most ABI struct mlx5_ib_create_cq get padded to be aligned on a
8 bytes multiple, while for i386, such padding is not added.

The tool pahole can be used to find such implicit padding:

  $ pahole --anon_include \
  	 --nested_anon_include \
  	 --recursive \
  	 --class_name mlx5_ib_create_cq \
  	 drivers/infiniband/hw/mlx5/mlx5_ib.o

Then, structure layout can be compared between i386 and x86_64:

#  +++ obj-i386/drivers/infiniband/hw/mlx5/mlx5_ib.o.pahole.txt    2014-03-28 11:43:07.386413682 +0100
#  --- obj-x86_64/drivers/infiniband/hw/mlx5/mlx5_ib.o.pahole.txt  2014-03-27 13:06:17.788472721 +0100
#  @@ -34,9 +34,8 @@ struct mlx5_ib_create_cq {
#          __u64                      db_addr;              /*     8     8 */
#          __u32                      cqe_size;             /*    16     4 */
#
#  -       /* size: 20, cachelines: 1, members: 3 */
#  -       /* last cacheline: 20 bytes */
#  +       /* size: 24, cachelines: 1, members: 3 */
#  +       /* padding: 4 */
#  +       /* last cacheline: 24 bytes */
#   };

This ABI disagreement will make an x86_64 kernel try to read past the
buffer provided by an i386 binary.

When boundary check will be implemented, a x86_64 kernel will refuse
to read past the i386 userspace provided buffer and the uverb will
fail.

Anyway, if the structure lies in memory on a page boundary and next
page is not mapped, ib_copy_from_udata() will fail when trying to read
the 4 bytes of padding and the uverb will fail.

This patch makes create_cq_user() takes care of the input data size to
handle the case where no padding is provided.

This way, x86_64 kernel will be able to handle struct
mlx5_ib_create_cq as sent by unpatched and patched i386 libmlx5.

Link: http://marc.info/?i=cover.1399309513.git.ydroneaud@opteya.com
Fixes: e126ba97dba9e ("mlx5: Add driver for Mellanox Connect-IB adapter")
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/infiniband/hw/mlx5/cq.c   |   13 ++++++++++++-
 drivers/infiniband/hw/mlx5/user.h |    1 +
 2 files changed, 13 insertions(+), 1 deletion(-)

--- a/drivers/infiniband/hw/mlx5/cq.c
+++ b/drivers/infiniband/hw/mlx5/cq.c
@@ -32,6 +32,7 @@
 
 #include <linux/kref.h>
 #include <rdma/ib_umem.h>
+#include <rdma/ib_user_verbs.h>
 #include "mlx5_ib.h"
 #include "user.h"
 
@@ -540,14 +541,24 @@ static int create_cq_user(struct mlx5_ib
 			  int *cqe_size, int *index, int *inlen)
 {
 	struct mlx5_ib_create_cq ucmd;
+	size_t ucmdlen;
 	int page_shift;
 	int npages;
 	int ncont;
 	int err;
 
-	if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)))
+	ucmdlen =
+		(udata->inlen - sizeof(struct ib_uverbs_cmd_hdr) <
+		 sizeof(ucmd)) ? (sizeof(ucmd) -
+				  sizeof(ucmd.reserved)) : sizeof(ucmd);
+
+	if (ib_copy_from_udata(&ucmd, udata, ucmdlen))
 		return -EFAULT;
 
+	if (ucmdlen == sizeof(ucmd) &&
+	    ucmd.reserved != 0)
+		return -EINVAL;
+
 	if (ucmd.cqe_size != 64 && ucmd.cqe_size != 128)
 		return -EINVAL;
 
--- a/drivers/infiniband/hw/mlx5/user.h
+++ b/drivers/infiniband/hw/mlx5/user.h
@@ -91,6 +91,7 @@ struct mlx5_ib_create_cq {
 	__u64	buf_addr;
 	__u64	db_addr;
 	__u32	cqe_size;
+	__u32	reserved; /* explicit padding (optional on i386) */
 };
 
 struct mlx5_ib_create_cq_resp {



  parent reply	other threads:[~2014-07-04 22:21 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-04 22:18 [PATCH 3.14 00/59] 3.14.11-stable review Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 01/59] ARM: dts: disable MDMA1 node for exynos5420 Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 02/59] target: Fix left-over se_lun->lun_sep pointer OOPs Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 03/59] iscsi-target: Avoid rejecting incorrect ITT for Data-Out Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 04/59] iscsi-target: Explicily clear login response PDU in exception path Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 05/59] iscsi-target: fix iscsit_del_np deadlock on unload Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 06/59] Input: synaptics - fix resolution for manually provided min/max Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 07/59] Input: elantech - deal with clickpads reporting right button events Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 08/59] Input: elantech - dont set bit 1 of reg_10 when the no_hw_res quirk is set Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 09/59] PCI: Add new ID for Intel GPU "spurious interrupt" quirk Greg Kroah-Hartman
2014-07-04 22:18 ` [PATCH 3.14 10/59] PCI: Fix incorrect vgaarb conditional in WARN_ON() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 11/59] mtip32xx: Fix ERO and NoSnoop values in PCIe upstream on AMD systems Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 12/59] mtip32xx: Increase timeout for STANDBY IMMEDIATE command Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 13/59] mtip32xx: Remove dfs_parent after pci unregister Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 14/59] recordmcount/MIPS: Fix possible incorrect mcount_loc table entries in modules Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 15/59] MIPS: MSC: Prevent out-of-bounds writes to MIPS SC ioremapd region Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 16/59] UBIFS: fix an mmap and fsync race condition Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 17/59] UBIFS: Remove incorrect assertion in shrink_tnc() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 18/59] watchdog: sp805: Set watchdog_device->timeout from ->set_timeout() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 19/59] watchdog: ath79_wdt: avoid spurious restarts on AR934x Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 20/59] watchdog: kempld-wdt: Use the correct value when configuring the prescaler with the watchdog Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 21/59] kernel/watchdog.c: remove preemption restrictions when restarting lockup detector Greg Kroah-Hartman
2014-07-04 22:19 ` Greg Kroah-Hartman [this message]
2014-07-04 22:19 ` [PATCH 3.14 23/59] IB/mlx5: add missing padding at end of struct mlx5_ib_create_srq Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 24/59] IB/qib: Fix port in pkey change event Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 25/59] IB/ipath: Translate legacy diagpkt into newer extended diagpkt Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 26/59] IB/srp: Fix a sporadic crash triggered by cable pulling Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 27/59] IB/umad: Fix error handling Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 28/59] IB/umad: Fix use-after-free on close Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 29/59] SUNRPC: Fix a module reference leak in svc_handle_xprt Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 30/59] pNFS: Handle allocation errors correctly in filelayout_alloc_layout_hdr() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 31/59] nfsd4: fix FREE_STATEID lockowner leak Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 32/59] nfsd: getattr for FATTR4_WORD0_FILES_AVAIL needs the statfs buffer Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 33/59] NFS: Dont declare inode uptodate unless all attributes were checked Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 34/59] NFS: Use raw_write_seqcount_begin/end int nfs4_reclaim_open_state Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 35/59] NFS: populate ->net in mount data when remounting Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 36/59] nfs: Fix cache_validity check in nfs_write_pageuptodate() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 37/59] powerpc/pseries: Fix overwritten PE state Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 38/59] powerpc/mm: Check paca psize is up to date for huge mappings Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 39/59] powerpc/serial: Use saner flags when creating legacy ports Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 40/59] powerpc: 64bit sendfile is capped at 2GB Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 41/59] powerpc: fix typo CONFIG_PMAC Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 42/59] powerpc/perf: Ensure all EBB register state is cleared on fork() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 43/59] powerpc: fix typo CONFIG_PPC_CPU Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 44/59] powerpc: Dont setup CPUs with bad status Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 45/59] powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category support Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 46/59] powerpc: Dont skip ePAPR spin-table CPUs Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 47/59] xfs: xfs_readsb needs to check for magic numbers Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 48/59] reiserfs: call truncate_setsize under tailpack mutex Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 49/59] MIPS: KVM: Remove redundant NULL checks before kfree() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 50/59] MIPS: KVM: Fix memory leak on VCPU Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 51/59] ipvs: Fix panic due to non-linear skb Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 52/59] ptrace,x86: force IRET path after a ptrace_stop() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 53/59] lz4: add overrun checks to lz4_uncompress_unknownoutputsize() Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 54/59] Documentation/SubmittingPatches: describe the Fixes: tag Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 55/59] tracing: Try again for saved cmdline if failed due to locking Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 56/59] tracing: Fix syscall_*regfunc() vs copy_process() race Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 57/59] ALSA: usb-audio: Fix races at disconnection and PCM closing Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 58/59] ALSA: hda - hdmi: call overridden init on resume Greg Kroah-Hartman
2014-07-04 22:19 ` [PATCH 3.14 59/59] ALSA: hda - Adjust speaker HPF and add LED support for HP Spectre 13 Greg Kroah-Hartman
2014-07-04 23:20   ` Holger Hoffstätte
2014-07-05 12:58   ` Takashi Iwai
2014-07-05 19:10     ` Greg Kroah-Hartman
2014-07-05  0:47 ` [PATCH 3.14 00/59] 3.14.11-stable review Holger Hoffstätte
2014-07-05  5:45 ` Guenter Roeck
2014-07-05  7:00   ` Satoru Takeuchi
2014-07-05  7:00     ` Satoru Takeuchi
2014-07-05  7:08     ` Guenter Roeck
2014-07-05  9:21     ` Satoru Takeuchi
2014-07-05  9:21       ` Satoru Takeuchi
2014-07-05 12:56       ` Takashi Iwai
2014-07-05 19:10         ` Greg Kroah-Hartman
2014-07-05 21:53           ` Satoru Takeuchi

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=20140704221540.603601563@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=roland@purestorage.com \
    --cc=stable@vger.kernel.org \
    --cc=ydroneaud@opteya.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.