| From f34ee3eeb7963bc843f5cb694aae1ba509c022e5 Mon Sep 17 00:00:00 2001 |
| From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
| Date: Thu, 22 Dec 2016 18:07:52 -0700 |
| Subject: [PATCH] RDMA/core: Fix incorrect structure packing for booleans |
| |
| commit 55efcfcd7776165b294f8b5cd6e05ca00ec89b7c upstream. |
| |
| The RDMA core uses ib_pack() to convert from unpacked CPU structs |
| to on-the-wire bitpacked structs. |
| |
| This process requires that 1 bit fields are declared as u8 in the |
| unpacked struct, otherwise the packing process does not read the |
| value properly and the packed result is wired to 0. Several |
| places wrongly used int. |
| |
| Crucially this means the kernel has never, set reversible |
| correctly in the path record request. It has always asked for |
| irreversible paths even if the ULP requests otherwise. |
| |
| When the kernel is used with a SM that supports this feature, it |
| completely breaks communication management if reversible paths are |
| not properly requested. |
| |
| The only reason this ever worked is because opensm ignores the |
| reversible bit. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> |
| Signed-off-by: Doug Ledford <dledford@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h |
| index 5ee7aab95eb8..fd0e53219f93 100644 |
| --- a/include/rdma/ib_sa.h |
| +++ b/include/rdma/ib_sa.h |
| @@ -153,12 +153,12 @@ struct ib_sa_path_rec { |
| union ib_gid sgid; |
| __be16 dlid; |
| __be16 slid; |
| - int raw_traffic; |
| + u8 raw_traffic; |
| /* reserved */ |
| __be32 flow_label; |
| u8 hop_limit; |
| u8 traffic_class; |
| - int reversible; |
| + u8 reversible; |
| u8 numb_path; |
| __be16 pkey; |
| __be16 qos_class; |
| @@ -220,7 +220,7 @@ struct ib_sa_mcmember_rec { |
| u8 hop_limit; |
| u8 scope; |
| u8 join_state; |
| - int proxy_join; |
| + u8 proxy_join; |
| }; |
| |
| /* Service Record Component Mask Sec 15.2.5.14 Ver 1.1 */ |
| -- |
| 2.12.0 |
| |