From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-sn1nam02on0091.outbound.protection.outlook.com ([104.47.36.91]:53152 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1032099AbeCAPaj (ORCPT ); Thu, 1 Mar 2018 10:30:39 -0500 From: Sasha Levin To: "stable@vger.kernel.org" , "stable-commits@vger.kernel.org" CC: Eric Biggers , "Rafael J . Wysocki" , Sasha Levin Subject: [added to the 4.1 stable tree] PM / sleep: declare __tracedata symbols as char[] rather than char Date: Thu, 1 Mar 2018 15:24:38 +0000 Message-ID: <20180301152116.1486-208-alexander.levin@microsoft.com> References: <20180301152116.1486-1-alexander.levin@microsoft.com> In-Reply-To: <20180301152116.1486-1-alexander.levin@microsoft.com> Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: From: Eric Biggers This patch has been added to the 4.1 stable tree. If you have any objections, please let us know. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D [ Upstream commit f97238373b8662a6d580e204df2e7bcbfa43e27a ] Accessing more than one byte from a symbol declared simply 'char' is undefi= ned behavior, as reported by UBSAN: UBSAN: Undefined behaviour in drivers/base/power/trace.c:178:18 load of address ffffffff8203fc78 with insufficient space for an object of type 'char' Avoid this by declaring the symbols as arrays. Signed-off-by: Eric Biggers Signed-off-by: Rafael J. Wysocki Signed-off-by: Sasha Levin --- drivers/base/power/trace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/base/power/trace.c b/drivers/base/power/trace.c index a311cfa4c5bd..a6975795e7f3 100644 --- a/drivers/base/power/trace.c +++ b/drivers/base/power/trace.c @@ -166,14 +166,14 @@ void generate_pm_trace(const void *tracedata, unsigne= d int user) } EXPORT_SYMBOL(generate_pm_trace); =20 -extern char __tracedata_start, __tracedata_end; +extern char __tracedata_start[], __tracedata_end[]; static int show_file_hash(unsigned int value) { int match; char *tracedata; =20 match =3D 0; - for (tracedata =3D &__tracedata_start ; tracedata < &__tracedata_end ; + for (tracedata =3D __tracedata_start ; tracedata < __tracedata_end ; tracedata +=3D 2 + sizeof(unsigned long)) { unsigned short lineno =3D *(unsigned short *)tracedata; const char *file =3D *(const char **)(tracedata + 2); --=20 2.14.1