]> git.baikalelectronics.ru Git - kernel.git/commitdiff
s390/irq: add union/struct to access external interrupt parameters
authorSven Schnelle <svens@linux.ibm.com>
Wed, 5 May 2021 20:01:11 +0000 (22:01 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 7 Jun 2021 15:06:58 +0000 (17:06 +0200)
gcc-11 warns:

arch/s390/kernel/irq.c: In function do_ext_irq:
arch/s390/kernel/irq.c:175:9: warning: memcpy reading 4 bytes from a region of size 0 [-Wstringop-overread]
  175 |         memcpy(&regs->int_code, &S390_lowcore.ext_cpu_addr, 4);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix this by adding a struct for int_code to struct lowcore.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/lowcore.h
arch/s390/kernel/irq.c

index a6f0b8feb12e5aaa6d6dc3bdb26aad481d671d6e..d08813c7f46254c033a0e0b853d5318585c03300 100644 (file)
@@ -22,8 +22,13 @@ struct lowcore {
        __u32   ipl_parmblock_ptr;              /* 0x0014 */
        __u8    pad_0x0018[0x0080-0x0018];      /* 0x0018 */
        __u32   ext_params;                     /* 0x0080 */
-       __u16   ext_cpu_addr;                   /* 0x0084 */
-       __u16   ext_int_code;                   /* 0x0086 */
+       union {
+               struct {
+                       __u16 ext_cpu_addr;     /* 0x0084 */
+                       __u16 ext_int_code;     /* 0x0086 */
+               } __packed;
+               __u32 ext_int_code_addr;
+       } __packed;
        __u32   svc_int_code;                   /* 0x0088 */
        __u16   pgm_ilc;                        /* 0x008c */
        __u16   pgm_code;                       /* 0x008e */
index 714269e10eec54ff8e47c5a9ea550931d6eb2882..169258012530a47f12dc56bc616093bf61e8ec60 100644 (file)
@@ -172,7 +172,7 @@ void noinstr do_ext_irq(struct pt_regs *regs)
        if (user_mode(regs))
                update_timer_sys();
 
-       memcpy(&regs->int_code, &S390_lowcore.ext_cpu_addr, 4);
+       regs->int_code = S390_lowcore.ext_int_code_addr;
        regs->int_parm = S390_lowcore.ext_params;
        regs->int_parm_long = S390_lowcore.ext_params2;