lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP-5=fUyAtf9PQqYvagByK+-=-mN-T1zuLmxuvsPFVVHT3qLXA@mail.gmail.com>
Date: Wed, 14 Jan 2026 09:51:14 -0800
From: Ian Rogers <irogers@...gle.com>
To: kernel test robot <lkp@...el.com>
Cc: oe-kbuild-all@...ts.linux.dev, linux-kernel@...r.kernel.org, 
	x86@...nel.org, Thomas Gleixner <tglx@...nel.org>
Subject: Re: [tip:timers/vdso 12/14] net/rds/ib_cm.c:96:35: sparse: sparse:
 incorrect type in argument 1 (different modifiers)

On Wed, Jan 14, 2026 at 8:37 AM kernel test robot <lkp@...el.com> wrote:
>
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/vdso
> head:   759a1f97373f25770cf438d9fb5f2bddf4d77a54
> commit: e04a494143bab7ea804fe1ebe286701ee8288e4a [12/14] vdso: Switch get/put_unaligned() from packed struct to memcpy()
> config: x86_64-randconfig-122-20260114 (https://download.01.org/0day-ci/archive/20260115/202601150001.sKSN644a-lkp@intel.com/config)
> compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
> rustc: rustc 1.88.0 (6b00bc388 2025-06-23)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260115/202601150001.sKSN644a-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@...el.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202601150001.sKSN644a-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
> >> net/rds/ib_cm.c:96:35: sparse: sparse: incorrect type in argument 1 (different modifiers) @@     expected void * @@     got restricted __be64 const * @@
>    net/rds/ib_cm.c:96:35: sparse:     expected void *
>    net/rds/ib_cm.c:96:35: sparse:     got restricted __be64 const *
>    net/rds/ib_cm.c:103:27: sparse: sparse: incorrect type in argument 1 (different modifiers) @@     expected void * @@     got restricted __be64 const * @@
>    net/rds/ib_cm.c:103:27: sparse:     expected void *
>    net/rds/ib_cm.c:103:27: sparse:     got restricted __be64 const *
>
> vim +96 net/rds/ib_cm.c
>
> ec16227e14141e Andy Grover                  2009-02-24   69
> ec16227e14141e Andy Grover                  2009-02-24   70  /*
> ec16227e14141e Andy Grover                  2009-02-24   71   * Connection established.
> ec16227e14141e Andy Grover                  2009-02-24   72   * We get here for both outgoing and incoming connection.
> ec16227e14141e Andy Grover                  2009-02-24   73   */
> ec16227e14141e Andy Grover                  2009-02-24   74  void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_event *event)
> ec16227e14141e Andy Grover                  2009-02-24   75  {
> ec16227e14141e Andy Grover                  2009-02-24   76     struct rds_ib_connection *ic = conn->c_transport_data;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   77     const union rds_ib_conn_priv *dp = NULL;

Here dp is a pointer to a constant value.

> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   78     __be64 ack_seq = 0;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   79     __be32 credit = 0;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   80     u8 major = 0;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   81     u8 minor = 0;
> ec16227e14141e Andy Grover                  2009-02-24   82     int err;
> ec16227e14141e Andy Grover                  2009-02-24   83
> ec16227e14141e Andy Grover                  2009-02-24   84     dp = event->param.conn.private_data;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   85     if (conn->c_isv6) {
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   86             if (event->param.conn.private_data_len >=
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   87                 sizeof(struct rds6_ib_connect_private)) {
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   88                     major = dp->ricp_v6.dp_protocol_major;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   89                     minor = dp->ricp_v6.dp_protocol_minor;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   90                     credit = dp->ricp_v6.dp_credit;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   91                     /* dp structure start is not guaranteed to be 8 bytes
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   92                      * aligned.  Since dp_ack_seq is 64-bit extended load
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   93                      * operations can be used so go through get_unaligned
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   94                      * to avoid unaligned errors.
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   95                      */
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  @96                     ack_seq = get_unaligned(&dp->ricp_v6.dp_ack_seq);

This is a warned about get_unaligned reported here.

In my patch:

+/**
+ * __get_unaligned_t - read an unaligned value from memory.
+ * @type:      the type to load from the pointer.
+ * @ptr:       the pointer to load from.
+ *
+ * Use memcpy to affect an unaligned type sized load avoiding
undefined behavior
+ * from approaches like type punning that require -fno-strict-aliasing in order
+ * to be correct. As type may be const, use __unqual_scalar_typeof to map to a
+ * non-const type - you can't memcpy into a const type. The
+ * __get_unaligned_ctrl_type gives __unqual_scalar_typeof its required
+ * expression rather than type, a pointer is used to avoid warnings
about mixing
+ * the use of 0 and NULL. The void* cast silences ubsan warnings.
+ */
+#define __get_unaligned_t(type, ptr) ({
         \
+       type *__get_unaligned_ctrl_type __always_unused = NULL;         \
+       __unqual_scalar_typeof(*__get_unaligned_ctrl_type)
__get_unaligned_val; \
+       __builtin_memcpy(&__get_unaligned_val, (void *)(ptr),           \
+                        sizeof(__get_unaligned_val));                  \
+       __get_unaligned_val;                                            \
 })

in "__builtin_memcpy(&__get_unaligned_val, (void *)(ptr)" there is a
void* cast and I believe this is what sparse is now warning about - I
don't believe the warning was present at the time of the original
series.

I believe, although it is a distant memory, I tried making the cast a
"(const void*)" cast rather than a "void*" cast but this caused
different warnings/issues. My patch is going through a compiler
warning, sparse, etc. wac-a-mole and the comment notes the cast is
present to avoid warnings with ubsan (undefined behavior sanitizer).

I think there are 2 options:
1) ignore the new sparse warning as tech debt for later clean up,
2) modify the cast to be "const void*" instead of "void *" and play
more wac-a-mole.

My preference would be 1 as I have a suspicion I played 2 and thought
the non-const cast was best (hence it being in the patch) given other
issues.

Thanks,
Ian


> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   97             }
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   98     } else if (event->param.conn.private_data_len >=
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23   99                sizeof(struct rds_ib_connect_private)) {
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  100             major = dp->ricp_v4.dp_protocol_major;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  101             minor = dp->ricp_v4.dp_protocol_minor;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  102             credit = dp->ricp_v4.dp_credit;
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  103             ack_seq = get_unaligned(&dp->ricp_v4.dp_ack_seq);
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  104     }
> ec16227e14141e Andy Grover                  2009-02-24  105
> 02a6a2592e41d2 Andy Grover                  2009-07-17  106     /* make sure it isn't empty data */
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  107     if (major) {
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  108             rds_ib_set_protocol(conn, RDS_PROTOCOL(major, minor));
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  109             rds_ib_set_flow_control(conn, be32_to_cpu(credit));
> 02a6a2592e41d2 Andy Grover                  2009-07-17  110     }
> ec16227e14141e Andy Grover                  2009-02-24  111
> cdc306a5c9cd36 Santosh Shilimkar            2018-10-13  112     if (conn->c_version < RDS_PROTOCOL_VERSION) {
> cdc306a5c9cd36 Santosh Shilimkar            2018-10-13  113             if (conn->c_version != RDS_PROTOCOL_COMPAT_VERSION) {
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  114                     pr_notice("RDS/IB: Connection <%pI6c,%pI6c> version %u.%u no longer supported\n",
> ff3f19a2f608ee Santosh Shilimkar            2016-03-14  115                               &conn->c_laddr, &conn->c_faddr,
> f147dd9ecabf23 Andy Grover                  2010-01-13  116                               RDS_PROTOCOL_MAJOR(conn->c_version),
> f147dd9ecabf23 Andy Grover                  2010-01-13  117                               RDS_PROTOCOL_MINOR(conn->c_version));
> f147dd9ecabf23 Andy Grover                  2010-01-13  118                     rds_conn_destroy(conn);
> f147dd9ecabf23 Andy Grover                  2010-01-13  119                     return;
> cdc306a5c9cd36 Santosh Shilimkar            2018-10-13  120             }
> cdc306a5c9cd36 Santosh Shilimkar            2018-10-13  121     }
> cdc306a5c9cd36 Santosh Shilimkar            2018-10-13  122
> fd261ce6a30e01 Santosh Shilimkar            2018-10-13  123     pr_notice("RDS/IB: %s conn connected <%pI6c,%pI6c,%d> version %u.%u%s\n",
> 581d53c91cbf7b Santosh Shilimkar            2016-07-09  124               ic->i_active_side ? "Active" : "Passive",
> fd261ce6a30e01 Santosh Shilimkar            2018-10-13  125               &conn->c_laddr, &conn->c_faddr, conn->c_tos,
> ec16227e14141e Andy Grover                  2009-02-24  126               RDS_PROTOCOL_MAJOR(conn->c_version),
> ec16227e14141e Andy Grover                  2009-02-24  127               RDS_PROTOCOL_MINOR(conn->c_version),
> ec16227e14141e Andy Grover                  2009-02-24  128               ic->i_flowctl ? ", flow control" : "");
> ec16227e14141e Andy Grover                  2009-02-24  129
> e0e6d062822529 Zhu Yanjun                   2019-08-23  130     /* receive sl from the peer */
> e0e6d062822529 Zhu Yanjun                   2019-08-23  131     ic->i_sl = ic->i_cm_id->route.path_rec->sl;
> e0e6d062822529 Zhu Yanjun                   2019-08-23  132
> cf657269d311d5 Santosh Shilimkar            2016-09-29  133     atomic_set(&ic->i_cq_quiesce, 0);
> cf657269d311d5 Santosh Shilimkar            2016-09-29  134
> 581d53c91cbf7b Santosh Shilimkar            2016-07-09  135     /* Init rings and fill recv. this needs to wait until protocol
> 581d53c91cbf7b Santosh Shilimkar            2016-07-09  136      * negotiation is complete, since ring layout is different
> 581d53c91cbf7b Santosh Shilimkar            2016-07-09  137      * from 3.1 to 4.1.
> e11d912a7dd4df Andy Grover                  2009-07-17  138      */
> e11d912a7dd4df Andy Grover                  2009-07-17  139     rds_ib_send_init_ring(ic);
> e11d912a7dd4df Andy Grover                  2009-07-17  140     rds_ib_recv_init_ring(ic);
> e11d912a7dd4df Andy Grover                  2009-07-17  141     /* Post receive buffers - as a side effect, this will update
> e11d912a7dd4df Andy Grover                  2009-07-17  142      * the posted credit count. */
> 73ce4317bf9832 santosh.shilimkar@...cle.com 2015-08-22  143     rds_ib_recv_refill(conn, 1, GFP_KERNEL);
> e11d912a7dd4df Andy Grover                  2009-07-17  144
> 3e0249f9c05cb7 Zach Brown                   2010-05-18  145     /* update ib_device with this local ipaddr */
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  146     err = rds_ib_update_ipaddr(ic->rds_ibdev, &conn->c_laddr);
> ec16227e14141e Andy Grover                  2009-02-24  147     if (err)
> 3e0249f9c05cb7 Zach Brown                   2010-05-18  148             printk(KERN_ERR "rds_ib_update_ipaddr failed (%d)\n",
> 3e0249f9c05cb7 Zach Brown                   2010-05-18  149                     err);
> ec16227e14141e Andy Grover                  2009-02-24  150
> ec16227e14141e Andy Grover                  2009-02-24  151     /* If the peer gave us the last packet it saw, process this as if
> ec16227e14141e Andy Grover                  2009-02-24  152      * we had received a regular ACK. */
> c0adf54a10903b shamir rabinovitch           2015-04-30  153     if (dp) {
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  154             if (ack_seq)
> eee2fa6ab32251 Ka-Cheong Poon               2018-07-23  155                     rds_send_drop_acked(conn, be64_to_cpu(ack_seq),
> c0adf54a10903b shamir rabinovitch           2015-04-30  156                                         NULL);
> c0adf54a10903b shamir rabinovitch           2015-04-30  157     }
> ec16227e14141e Andy Grover                  2009-02-24  158
> cdc306a5c9cd36 Santosh Shilimkar            2018-10-13  159     conn->c_proposed_version = conn->c_version;
> ec16227e14141e Andy Grover                  2009-02-24  160     rds_connect_complete(conn);
> ec16227e14141e Andy Grover                  2009-02-24  161  }
> ec16227e14141e Andy Grover                  2009-02-24  162
>
> :::::: The code at line 96 was first introduced by commit
> :::::: eee2fa6ab3225192d6d894c54a6fb02ac9efdff6 rds: Changing IP address internal representation to struct in6_addr
>
> :::::: TO: Ka-Cheong Poon <ka-cheong.poon@...cle.com>
> :::::: CC: David S. Miller <davem@...emloft.net>
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ