Commit 015ed943 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'maybe-uninitialized' (patches from Arnd)

Merge fixes for -Wmaybe-uninitialized from Arnd Bergmann:
 "It took a while for some patches to make it into mainline through
  maintainer trees, but the 28-patch series is now reduced to 10, with
  one tiny patch added at the end.

  Aside from patches that are no longer required, I did these changes
  compared to version 1:

   - Dropped "iio: maxim_thermocouple: detect invalid storage size in
     read()", which is currently in linux-next as commit 32cb7d27.
     This is the only remaining warning I see for a couple of corner
     cases (kbuild bot reports it on blackfin, kernelci bot and arm-soc
     bot both report it on arm64)

   - Dropped "brcmfmac: avoid maybe-uninitialized warning in
     brcmf_cfg80211_start_ap", which is currently in net/master merge
     pending.

   - Dropped two x86 patches, "x86: math-emu: possible uninitialized
     variable use" and "x86: mark target address as output in 'insb'
     asm" as they do not seem to trigger for a default build, and I got
     no feedback on them. Both of these are ancient issues and seem
     harmless, I will send them again to the x86 maintainers once the
     rest is merged.

   - Dropped "rbd: false-postive gcc-4.9 -Wmaybe-uninitialized" based on
     feedback from Ilya Dryomov, who already has a different fix queued
     up for v4.10. The kbuild bot reports this as a warning for xtensa.

   - Replaced "crypto: aesni: avoid -Wmaybe-uninitialized warning" with
     a simpler patch, this one always triggers but my first solution
     would not be safe for linux-4.9 any more at this point. I'll follow
     up with the larger patch as a cleanup for 4.10.

   - Replaced "dib0700: fix nec repeat handling" with a better one,
     contributed by Sean Young"

* -Wmaybe-uninitialized fixes:
  Kbuild: enable -Wmaybe-uninitialized warnings by default
  pcmcia: fix return value of soc_pcmcia_regulator_set
  infiniband: shut up a maybe-uninitialized warning
  crypto: aesni: shut up -Wmaybe-uninitialized warning
  rc: print correct variable for z8f0811
  dib0700: fix nec repeat handling
  s390: pci: don't print uninitialized data for debugging
  nios2: fix timer initcall return value
  x86: apm: avoid uninitialized data
  NFSv4.1: work around -Wmaybe-uninitialized warning
  Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"
parents 968ef8de 4324cb23
...@@ -370,7 +370,7 @@ LDFLAGS_MODULE = ...@@ -370,7 +370,7 @@ LDFLAGS_MODULE =
CFLAGS_KERNEL = CFLAGS_KERNEL =
AFLAGS_KERNEL = AFLAGS_KERNEL =
LDFLAGS_vmlinux = LDFLAGS_vmlinux =
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
CFLAGS_KCOV := $(call cc-option,-fsanitize-coverage=trace-pc,) CFLAGS_KCOV := $(call cc-option,-fsanitize-coverage=trace-pc,)
...@@ -620,7 +620,6 @@ ARCH_CFLAGS := ...@@ -620,7 +620,6 @@ ARCH_CFLAGS :=
include arch/$(SRCARCH)/Makefile include arch/$(SRCARCH)/Makefile
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,) KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,) KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
...@@ -629,15 +628,18 @@ KBUILD_CFLAGS += $(call cc-option,-fdata-sections,) ...@@ -629,15 +628,18 @@ KBUILD_CFLAGS += $(call cc-option,-fdata-sections,)
endif endif
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
else else
ifdef CONFIG_PROFILE_ALL_BRANCHES ifdef CONFIG_PROFILE_ALL_BRANCHES
KBUILD_CFLAGS += -O2 KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
else else
KBUILD_CFLAGS += -O2 KBUILD_CFLAGS += -O2
endif endif
endif endif
KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
$(call cc-disable-warning,maybe-uninitialized,))
# Tell gcc to never replace conditional load with a non-conditional one # Tell gcc to never replace conditional load with a non-conditional one
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
......
...@@ -68,7 +68,9 @@ cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi) ...@@ -68,7 +68,9 @@ cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi)
ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE
# Generic build system uses -O2, we want -O3 # Generic build system uses -O2, we want -O3
# Note: No need to add to cflags-y as that happens anyways # Note: No need to add to cflags-y as that happens anyways
ARCH_CFLAGS += -O3 #
# Disable the false maybe-uninitialized warings gcc spits out at -O3
ARCH_CFLAGS += -O3 $(call cc-disable-warning,maybe-uninitialized,)
endif endif
# small data is default for elf32 tool-chain. If not usable, disable it # small data is default for elf32 tool-chain. If not usable, disable it
......
...@@ -324,6 +324,7 @@ static int __init nios2_time_init(struct device_node *timer) ...@@ -324,6 +324,7 @@ static int __init nios2_time_init(struct device_node *timer)
ret = nios2_clocksource_init(timer); ret = nios2_clocksource_init(timer);
break; break;
default: default:
ret = 0;
break; break;
} }
......
...@@ -423,7 +423,7 @@ static int __s390_dma_map_sg(struct device *dev, struct scatterlist *sg, ...@@ -423,7 +423,7 @@ static int __s390_dma_map_sg(struct device *dev, struct scatterlist *sg,
dma_addr_t dma_addr_base, dma_addr; dma_addr_t dma_addr_base, dma_addr;
int flags = ZPCI_PTE_VALID; int flags = ZPCI_PTE_VALID;
struct scatterlist *s; struct scatterlist *s;
unsigned long pa; unsigned long pa = 0;
int ret; int ret;
size = PAGE_ALIGN(size); size = PAGE_ALIGN(size);
......
...@@ -888,7 +888,7 @@ static int helper_rfc4106_encrypt(struct aead_request *req) ...@@ -888,7 +888,7 @@ static int helper_rfc4106_encrypt(struct aead_request *req)
unsigned long auth_tag_len = crypto_aead_authsize(tfm); unsigned long auth_tag_len = crypto_aead_authsize(tfm);
u8 iv[16] __attribute__ ((__aligned__(AESNI_ALIGN))); u8 iv[16] __attribute__ ((__aligned__(AESNI_ALIGN)));
struct scatter_walk src_sg_walk; struct scatter_walk src_sg_walk;
struct scatter_walk dst_sg_walk; struct scatter_walk dst_sg_walk = {};
unsigned int i; unsigned int i;
/* Assuming we are supporting rfc4106 64-bit extended */ /* Assuming we are supporting rfc4106 64-bit extended */
...@@ -968,7 +968,7 @@ static int helper_rfc4106_decrypt(struct aead_request *req) ...@@ -968,7 +968,7 @@ static int helper_rfc4106_decrypt(struct aead_request *req)
u8 iv[16] __attribute__ ((__aligned__(AESNI_ALIGN))); u8 iv[16] __attribute__ ((__aligned__(AESNI_ALIGN)));
u8 authTag[16]; u8 authTag[16];
struct scatter_walk src_sg_walk; struct scatter_walk src_sg_walk;
struct scatter_walk dst_sg_walk; struct scatter_walk dst_sg_walk = {};
unsigned int i; unsigned int i;
if (unlikely(req->assoclen != 16 && req->assoclen != 20)) if (unlikely(req->assoclen != 16 && req->assoclen != 20))
......
...@@ -1042,8 +1042,11 @@ static int apm_get_power_status(u_short *status, u_short *bat, u_short *life) ...@@ -1042,8 +1042,11 @@ static int apm_get_power_status(u_short *status, u_short *bat, u_short *life)
if (apm_info.get_power_status_broken) if (apm_info.get_power_status_broken)
return APM_32_UNSUPPORTED; return APM_32_UNSUPPORTED;
if (apm_bios_call(&call)) if (apm_bios_call(&call)) {
if (!call.err)
return APM_NO_ERROR;
return call.err; return call.err;
}
*status = call.ebx; *status = call.ebx;
*bat = call.ecx; *bat = call.ecx;
if (apm_info.get_power_status_swabinminutes) { if (apm_info.get_power_status_swabinminutes) {
......
...@@ -1094,47 +1094,47 @@ static void cma_save_ib_info(struct sockaddr *src_addr, ...@@ -1094,47 +1094,47 @@ static void cma_save_ib_info(struct sockaddr *src_addr,
} }
} }
static void cma_save_ip4_info(struct sockaddr *src_addr, static void cma_save_ip4_info(struct sockaddr_in *src_addr,
struct sockaddr *dst_addr, struct sockaddr_in *dst_addr,
struct cma_hdr *hdr, struct cma_hdr *hdr,
__be16 local_port) __be16 local_port)
{ {
struct sockaddr_in *ip4;
if (src_addr) { if (src_addr) {
ip4 = (struct sockaddr_in *)src_addr; *src_addr = (struct sockaddr_in) {
ip4->sin_family = AF_INET; .sin_family = AF_INET,
ip4->sin_addr.s_addr = hdr->dst_addr.ip4.addr; .sin_addr.s_addr = hdr->dst_addr.ip4.addr,
ip4->sin_port = local_port; .sin_port = local_port,
};
} }
if (dst_addr) { if (dst_addr) {
ip4 = (struct sockaddr_in *)dst_addr; *dst_addr = (struct sockaddr_in) {
ip4->sin_family = AF_INET; .sin_family = AF_INET,
ip4->sin_addr.s_addr = hdr->src_addr.ip4.addr; .sin_addr.s_addr = hdr->src_addr.ip4.addr,
ip4->sin_port = hdr->port; .sin_port = hdr->port,
};
} }
} }
static void cma_save_ip6_info(struct sockaddr *src_addr, static void cma_save_ip6_info(struct sockaddr_in6 *src_addr,
struct sockaddr *dst_addr, struct sockaddr_in6 *dst_addr,
struct cma_hdr *hdr, struct cma_hdr *hdr,
__be16 local_port) __be16 local_port)
{ {
struct sockaddr_in6 *ip6;
if (src_addr) { if (src_addr) {
ip6 = (struct sockaddr_in6 *)src_addr; *src_addr = (struct sockaddr_in6) {
ip6->sin6_family = AF_INET6; .sin6_family = AF_INET6,
ip6->sin6_addr = hdr->dst_addr.ip6; .sin6_addr = hdr->dst_addr.ip6,
ip6->sin6_port = local_port; .sin6_port = local_port,
};
} }
if (dst_addr) { if (dst_addr) {
ip6 = (struct sockaddr_in6 *)dst_addr; *dst_addr = (struct sockaddr_in6) {
ip6->sin6_family = AF_INET6; .sin6_family = AF_INET6,
ip6->sin6_addr = hdr->src_addr.ip6; .sin6_addr = hdr->src_addr.ip6,
ip6->sin6_port = hdr->port; .sin6_port = hdr->port,
};
} }
} }
...@@ -1159,10 +1159,12 @@ static int cma_save_ip_info(struct sockaddr *src_addr, ...@@ -1159,10 +1159,12 @@ static int cma_save_ip_info(struct sockaddr *src_addr,
switch (cma_get_ip_ver(hdr)) { switch (cma_get_ip_ver(hdr)) {
case 4: case 4:
cma_save_ip4_info(src_addr, dst_addr, hdr, port); cma_save_ip4_info((struct sockaddr_in *)src_addr,
(struct sockaddr_in *)dst_addr, hdr, port);
break; break;
case 6: case 6:
cma_save_ip6_info(src_addr, dst_addr, hdr, port); cma_save_ip6_info((struct sockaddr_in6 *)src_addr,
(struct sockaddr_in6 *)dst_addr, hdr, port);
break; break;
default: default:
return -EAFNOSUPPORT; return -EAFNOSUPPORT;
......
...@@ -118,7 +118,7 @@ static int get_key_haup_common(struct IR_i2c *ir, enum rc_type *protocol, ...@@ -118,7 +118,7 @@ static int get_key_haup_common(struct IR_i2c *ir, enum rc_type *protocol,
*protocol = RC_TYPE_RC6_MCE; *protocol = RC_TYPE_RC6_MCE;
dev &= 0x7f; dev &= 0x7f;
dprintk(1, "ir hauppauge (rc6-mce): t%d vendor=%d dev=%d code=%d\n", dprintk(1, "ir hauppauge (rc6-mce): t%d vendor=%d dev=%d code=%d\n",
toggle, vendor, dev, code); *ptoggle, vendor, dev, code);
} else { } else {
*ptoggle = 0; *ptoggle = 0;
*protocol = RC_TYPE_RC6_6A_32; *protocol = RC_TYPE_RC6_6A_32;
......
...@@ -704,7 +704,7 @@ static void dib0700_rc_urb_completion(struct urb *purb) ...@@ -704,7 +704,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)
struct dvb_usb_device *d = purb->context; struct dvb_usb_device *d = purb->context;
struct dib0700_rc_response *poll_reply; struct dib0700_rc_response *poll_reply;
enum rc_type protocol; enum rc_type protocol;
u32 uninitialized_var(keycode); u32 keycode;
u8 toggle; u8 toggle;
deb_info("%s()\n", __func__); deb_info("%s()\n", __func__);
...@@ -745,7 +745,8 @@ static void dib0700_rc_urb_completion(struct urb *purb) ...@@ -745,7 +745,8 @@ static void dib0700_rc_urb_completion(struct urb *purb)
poll_reply->nec.data == 0x00 && poll_reply->nec.data == 0x00 &&
poll_reply->nec.not_data == 0xff) { poll_reply->nec.not_data == 0xff) {
poll_reply->data_state = 2; poll_reply->data_state = 2;
break; rc_repeat(d->rc_dev);
goto resubmit;
} }
if ((poll_reply->nec.data ^ poll_reply->nec.not_data) != 0xff) { if ((poll_reply->nec.data ^ poll_reply->nec.not_data) != 0xff) {
......
...@@ -107,7 +107,7 @@ int soc_pcmcia_regulator_set(struct soc_pcmcia_socket *skt, ...@@ -107,7 +107,7 @@ int soc_pcmcia_regulator_set(struct soc_pcmcia_socket *skt,
ret = regulator_enable(r->reg); ret = regulator_enable(r->reg);
} else { } else {
regulator_disable(r->reg); ret = regulator_disable(r->reg);
} }
if (ret == 0) if (ret == 0)
r->on = on; r->on = on;
......
...@@ -36,6 +36,7 @@ warning-2 += -Wshadow ...@@ -36,6 +36,7 @@ warning-2 += -Wshadow
warning-2 += $(call cc-option, -Wlogical-op) warning-2 += $(call cc-option, -Wlogical-op)
warning-2 += $(call cc-option, -Wmissing-field-initializers) warning-2 += $(call cc-option, -Wmissing-field-initializers)
warning-2 += $(call cc-option, -Wsign-compare) warning-2 += $(call cc-option, -Wsign-compare)
warning-2 += $(call cc-option, -Wmaybe-uninitialized)
warning-3 := -Wbad-function-cast warning-3 := -Wbad-function-cast
warning-3 += -Wcast-qual warning-3 += -Wcast-qual
......
...@@ -17,4 +17,8 @@ endif ...@@ -17,4 +17,8 @@ endif
ifdef CONFIG_UBSAN_NULL ifdef CONFIG_UBSAN_NULL
CFLAGS_UBSAN += $(call cc-option, -fsanitize=null) CFLAGS_UBSAN += $(call cc-option, -fsanitize=null)
endif 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)
endif endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment