Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1323325 > unrolled thread
| Started by | Andrey Ryabinin <aryabinin@virtuozzo.com> |
|---|---|
| First post | 2016-02-01 18:10 +0100 |
| Last post | 2016-02-01 22:10 +0100 |
| Articles | 3 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH -mm] ubsan, x86: disable alignemnt checks for arch/x86/* Andrey Ryabinin <aryabinin@virtuozzo.com> - 2016-02-01 18:10 +0100
Re: [PATCH -mm] ubsan, x86: disable alignemnt checks for arch/x86/* kbuild test robot <lkp@intel.com> - 2016-02-01 19:30 +0100
Re: [PATCH -mm] ubsan, x86: disable alignemnt checks for arch/x86/* Mike Krinkin <krinkin.m.u@gmail.com> - 2016-02-01 22:10 +0100
| From | Andrey Ryabinin <aryabinin@virtuozzo.com> |
|---|---|
| Date | 2016-02-01 18:10 +0100 |
| Subject | [PATCH -mm] ubsan, x86: disable alignemnt checks for arch/x86/* |
| Message-ID | <qXq9b-62X-3@gated-at.bofh.it> |
On 01/30/2016 03:36 AM, Mike Krinkin wrote:
> option CONFIG_UBSAN_ALIGNMENT breaks x86-64 kernel with lockdep enabled,
> i. e kernel with CONFIG_UBSAN_ALIGNMENT fails to load without even any
> error message.
>
> The problem is that ubsan callbacks use spinlocks and might be called
> before lockdep is initialized.
There is also report from kernel test robot:
[ 0.000000] WARNING: lockdep init error: lock 'report_lock' was acquired before lockdep_init().
[ 0.000000] Call stack leading to lockdep invocation was:
[ 0.000000] [<b9e30ec5>] save_stack_trace+0x26/0x16d
[ 0.000000] [<b9f98054>] __lock_acquire+0x237/0x15a4
[ 0.000000] [<b9f994db>] lock_acquire+0x11a/0x1a9
[ 0.000000] [<bae228f9>] _raw_spin_lock_irqsave+0x39/0x49
[ 0.000000] [<ba5df852>] ubsan_prologue+0x1e/0x51
[ 0.000000] [<ba5dfb02>] __ubsan_handle_type_mismatch+0xbd/0x14a
[ 0.000000] [<bbca63c3>] reserve_ebda_region+0x8b/0x1bb
[ 0.000000] [<bbca632c>] i386_start_kernel+0xf6/0x102
[ 0.000000] [<ffffffff>] 0xffffffff
Let's disable aligment checks for x86-specific code since those are not
useful.
Changes around CFLAGS_UBSAN in this patch needed to be sure that cflags
from 'subdir-ccflags-' appears only after CFLAGS_UBSAN.
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Reported-by: kernel test robot <ying.huang@linux.intel.com>
Reported-by: Mike Krinkin <krinkin.m.u@gmail.com>
---
Makefile | 2 +-
arch/x86/Kbuild | 2 ++
scripts/Makefile.lib | 4 ++--
scripts/Makefile.ubsan | 5 +++++
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 6c1a3c2..1da29a0 100644
--- a/Makefile
+++ b/Makefile
@@ -411,7 +411,7 @@ export MAKE AWK GENKSYMS INSTALLKERNEL PERL PYTHON UTS_MACHINE
export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
-export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV CFLAGS_KASAN CFLAGS_UBSAN
+export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV CFLAGS_KASAN
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
diff --git a/arch/x86/Kbuild b/arch/x86/Kbuild
index 1538562..f1348ce 100644
--- a/arch/x86/Kbuild
+++ b/arch/x86/Kbuild
@@ -21,3 +21,5 @@ obj-y += platform/
obj-y += net/
obj-$(CONFIG_KEXEC_FILE) += purgatory/
+
+subdir-ccflags-$(CONFIG_UBSAN_ALIGNMENT) := $(call cc-option, -fno-sanitize=alignment)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 2edbcad..d7342cf 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -132,8 +132,8 @@ endif
ifeq ($(CONFIG_UBSAN),y)
_c_flags += $(if $(patsubst n%,, \
- $(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)), \
- $(CFLAGS_UBSAN))
+ $(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)),, \
+ $(DISABLE_UBSAN))
endif
# If building the kernel in a separate objtree expand all occurrences
diff --git a/scripts/Makefile.ubsan b/scripts/Makefile.ubsan
index 77ce538..91c1dd3 100644
--- a/scripts/Makefile.ubsan
+++ b/scripts/Makefile.ubsan
@@ -18,4 +18,9 @@ endif
# -fsanitize=* options makes GCC less smart than usual and
# increase number of 'maybe-uninitialized false-positives
CFLAGS_UBSAN += $(call cc-option, -Wno-maybe-uninitialized)
+
+ KBUILD_CFLAGS += $(CFLAGS_UBSAN)
+ export DISABLE_UBSAN
+ DISABLE_UBSAN := $(call cc-option, -fno-sanitize=undefined)
+ DISABLE_UBSAN += $(call cc-option, -Wmaybe-uninitialized)
endif
--
2.4.10
[toc] | [next] | [standalone]
| From | kbuild test robot <lkp@intel.com> |
|---|---|
| Date | 2016-02-01 19:30 +0100 |
| Message-ID | <qXroC-6S9-19@gated-at.bofh.it> |
| In reply to | #1323325 |
[Multipart message — attachments visible in raw view] — view raw
Hi Andrey,
[auto build test WARNING on next-20160201]
[cannot apply to kbuild/for-next kbuild/rc-fixes v4.5-rc2 v4.5-rc1 v4.4-rc8 v4.5-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]
url: https://github.com/0day-ci/linux/commits/Andrey-Ryabinin/ubsan-x86-disable-alignemnt-checks-for-arch-x86/20160202-010948
config: i386-randconfig-c0-02020138 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings
All warnings (new ones prefixed by >>):
drivers/char/tpm/tpm2-cmd.c: In function 'tpm2_unseal_trusted':
>> drivers/char/tpm/tpm2-cmd.c:600:3: warning: 'blob_handle' may be used uninitialized in this function [-Wmaybe-uninitialized]
dev_warn(chip->pdev, "0x%08x was not flushed, out of memory\n",
^
drivers/char/tpm/tpm2-cmd.c:668:6: note: 'blob_handle' was declared here
u32 blob_handle;
^
--
drivers/gpio/gpiolib-of.c: In function 'of_gpiochip_add':
>> drivers/gpio/gpiolib-of.c:221:7: warning: 'dflags' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (gpiod_hog(desc, name, lflags, dflags))
^
drivers/gpio/gpiolib-of.c:211:19: note: 'dflags' was declared here
enum gpiod_flags dflags;
^
>> drivers/gpio/gpiolib-of.c:221:7: warning: 'lflags' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (gpiod_hog(desc, name, lflags, dflags))
^
drivers/gpio/gpiolib-of.c:210:25: note: 'lflags' was declared here
enum gpio_lookup_flags lflags;
^
--
drivers/media/dvb-frontends/drx39xyj/drxj.c: In function 'drx39xxj_read_status':
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:10737:33: warning: 'mer' may be used uninitialized in this function [-Wmaybe-uninitialized]
p->cnr.stat[0].svalue = mer * 100;
^
drivers/media/dvb-frontends/drx39xyj/drxj.c:10670:6: note: 'mer' was declared here
u16 mer, strength = 0;
^
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:10728:38: warning: 'ber' may be used uninitialized in this function [-Wmaybe-uninitialized]
p->post_bit_error.stat[0].uvalue += ber;
^
drivers/media/dvb-frontends/drx39xyj/drxj.c:10669:6: note: 'ber' was declared here
u32 ber, cnt, err, pkt;
^
>> drivers/media/dvb-frontends/drx39xyj/drxj.c:10705:35: warning: 'err' may be used uninitialized in this function [-Wmaybe-uninitialized]
p->block_error.stat[0].uvalue += err;
^
drivers/media/dvb-frontends/drx39xyj/drxj.c:10669:16: note: 'err' was declared here
u32 ber, cnt, err, pkt;
^
--
drivers/media/tuners/tda18218.c: In function 'tda18218_attach':
>> drivers/media/tuners/tda18218.c:324:10: warning: 'val' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (ret || val != def_regs[R00_ID]) {
^
--
In file included from drivers/spi/spidev.c:28:0:
drivers/spi/spidev.c: In function 'spidev_ioctl':
>> include/linux/slab.h:562:9: warning: 'n_ioc' may be used uninitialized in this function [-Wmaybe-uninitialized]
return __kmalloc(n * size, flags);
^
drivers/spi/spidev.c:362:12: note: 'n_ioc' was declared here
unsigned n_ioc;
^
--
fs/btrfs/send.c: In function '__iterate_backrefs':
>> fs/btrfs/send.c:1228:5: warning: 'i_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (offset + bctx->data_offset + bctx->extent_len > i_size)
^
--
ipc/shm.c: In function 'SyS_shmdt':
>> ipc/shm.c:1311:59: warning: 'file' may be used uninitialized in this function [-Wmaybe-uninitialized]
((vma->vm_start - addr)/PAGE_SIZE == vma->vm_pgoff) &&
^
ipc/shm.c:1234:15: note: 'file' was declared here
struct file *file;
^
--
mm/vmscan.c: In function 'shrink_zone':
>> mm/vmscan.c:2410:18: warning: 'lru_pages' may be used uninitialized in this function [-Wmaybe-uninitialized]
unsigned long lru_pages;
^
--
net/core/dev.c: In function 'validate_xmit_skb_list':
>> net/core/dev.c:2984:15: warning: 'tail' may be used uninitialized in this function [-Wmaybe-uninitialized]
tail->next = skb;
^
vim +/blob_handle +600 drivers/char/tpm/tpm2-cmd.c
954650ef Jarkko Sakkinen 2015-05-30 584 out:
954650ef Jarkko Sakkinen 2015-05-30 585 tpm_buf_destroy(&buf);
954650ef Jarkko Sakkinen 2015-05-30 586
954650ef Jarkko Sakkinen 2015-05-30 587 if (rc > 0)
954650ef Jarkko Sakkinen 2015-05-30 588 rc = -EPERM;
954650ef Jarkko Sakkinen 2015-05-30 589
954650ef Jarkko Sakkinen 2015-05-30 590 return rc;
954650ef Jarkko Sakkinen 2015-05-30 591 }
954650ef Jarkko Sakkinen 2015-05-30 592
954650ef Jarkko Sakkinen 2015-05-30 593 static void tpm2_flush_context(struct tpm_chip *chip, u32 handle)
954650ef Jarkko Sakkinen 2015-05-30 594 {
954650ef Jarkko Sakkinen 2015-05-30 595 struct tpm_buf buf;
954650ef Jarkko Sakkinen 2015-05-30 596 int rc;
954650ef Jarkko Sakkinen 2015-05-30 597
954650ef Jarkko Sakkinen 2015-05-30 598 rc = tpm_buf_init(&buf, TPM2_ST_NO_SESSIONS, TPM2_CC_FLUSH_CONTEXT);
954650ef Jarkko Sakkinen 2015-05-30 599 if (rc) {
954650ef Jarkko Sakkinen 2015-05-30 @600 dev_warn(chip->pdev, "0x%08x was not flushed, out of memory\n",
954650ef Jarkko Sakkinen 2015-05-30 601 handle);
954650ef Jarkko Sakkinen 2015-05-30 602 return;
954650ef Jarkko Sakkinen 2015-05-30 603 }
954650ef Jarkko Sakkinen 2015-05-30 604
954650ef Jarkko Sakkinen 2015-05-30 605 tpm_buf_append_u32(&buf, handle);
954650ef Jarkko Sakkinen 2015-05-30 606
954650ef Jarkko Sakkinen 2015-05-30 607 rc = tpm_transmit_cmd(chip, buf.data, PAGE_SIZE, "flushing context");
954650ef Jarkko Sakkinen 2015-05-30 608 if (rc)
:::::: The code at line 600 was first introduced by commit
:::::: 954650efb79f99d5c817c121bb0a7c6c53362048 tpm: seal/unseal for TPM 2.0
:::::: TO: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
:::::: CC: Peter Huewe <peterhuewe@gmx.de>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[toc] | [prev] | [next] | [standalone]
| From | Mike Krinkin <krinkin.m.u@gmail.com> |
|---|---|
| Date | 2016-02-01 22:10 +0100 |
| Message-ID | <qXtTr-iU-3@gated-at.bofh.it> |
| In reply to | #1323325 |
Works well for me, thank you. Tested-by: Mike Krinkin <krinkin.m.u@gmail.com> On Mon, Feb 01, 2016 at 08:08:19PM +0300, Andrey Ryabinin wrote: > On 01/30/2016 03:36 AM, Mike Krinkin wrote: > > option CONFIG_UBSAN_ALIGNMENT breaks x86-64 kernel with lockdep enabled, > > i. e kernel with CONFIG_UBSAN_ALIGNMENT fails to load without even any > > error message. > > > > The problem is that ubsan callbacks use spinlocks and might be called > > before lockdep is initialized. > > There is also report from kernel test robot: > [ 0.000000] WARNING: lockdep init error: lock 'report_lock' was acquired before lockdep_init(). > [ 0.000000] Call stack leading to lockdep invocation was: > [ 0.000000] [<b9e30ec5>] save_stack_trace+0x26/0x16d > [ 0.000000] [<b9f98054>] __lock_acquire+0x237/0x15a4 > [ 0.000000] [<b9f994db>] lock_acquire+0x11a/0x1a9 > [ 0.000000] [<bae228f9>] _raw_spin_lock_irqsave+0x39/0x49 > [ 0.000000] [<ba5df852>] ubsan_prologue+0x1e/0x51 > [ 0.000000] [<ba5dfb02>] __ubsan_handle_type_mismatch+0xbd/0x14a > [ 0.000000] [<bbca63c3>] reserve_ebda_region+0x8b/0x1bb > [ 0.000000] [<bbca632c>] i386_start_kernel+0xf6/0x102 > [ 0.000000] [<ffffffff>] 0xffffffff > > Let's disable aligment checks for x86-specific code since those are not > useful. > Changes around CFLAGS_UBSAN in this patch needed to be sure that cflags > from 'subdir-ccflags-' appears only after CFLAGS_UBSAN. > > Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> > Reported-by: kernel test robot <ying.huang@linux.intel.com> > Reported-by: Mike Krinkin <krinkin.m.u@gmail.com> > --- > Makefile | 2 +- > arch/x86/Kbuild | 2 ++ > scripts/Makefile.lib | 4 ++-- > scripts/Makefile.ubsan | 5 +++++ > 4 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/Makefile b/Makefile > index 6c1a3c2..1da29a0 100644 > --- a/Makefile > +++ b/Makefile > @@ -411,7 +411,7 @@ export MAKE AWK GENKSYMS INSTALLKERNEL PERL PYTHON UTS_MACHINE > export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS > > export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS > -export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV CFLAGS_KASAN CFLAGS_UBSAN > +export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV CFLAGS_KASAN > export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE > export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE > export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL > diff --git a/arch/x86/Kbuild b/arch/x86/Kbuild > index 1538562..f1348ce 100644 > --- a/arch/x86/Kbuild > +++ b/arch/x86/Kbuild > @@ -21,3 +21,5 @@ obj-y += platform/ > obj-y += net/ > > obj-$(CONFIG_KEXEC_FILE) += purgatory/ > + > +subdir-ccflags-$(CONFIG_UBSAN_ALIGNMENT) := $(call cc-option, -fno-sanitize=alignment) > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index 2edbcad..d7342cf 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -132,8 +132,8 @@ endif > > ifeq ($(CONFIG_UBSAN),y) > _c_flags += $(if $(patsubst n%,, \ > - $(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)), \ > - $(CFLAGS_UBSAN)) > + $(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)),, \ > + $(DISABLE_UBSAN)) > endif > > # If building the kernel in a separate objtree expand all occurrences > diff --git a/scripts/Makefile.ubsan b/scripts/Makefile.ubsan > index 77ce538..91c1dd3 100644 > --- a/scripts/Makefile.ubsan > +++ b/scripts/Makefile.ubsan > @@ -18,4 +18,9 @@ endif > # -fsanitize=* options makes GCC less smart than usual and > # increase number of 'maybe-uninitialized false-positives > CFLAGS_UBSAN += $(call cc-option, -Wno-maybe-uninitialized) > + > + KBUILD_CFLAGS += $(CFLAGS_UBSAN) > + export DISABLE_UBSAN > + DISABLE_UBSAN := $(call cc-option, -fno-sanitize=undefined) > + DISABLE_UBSAN += $(call cc-option, -Wmaybe-uninitialized) > endif > -- > 2.4.10 >
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web