]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sparc: fix compat recv/recvfrom syscalls
authorArnd Bergmann <arnd@arndb.de>
Wed, 19 Jun 2024 10:49:39 +0000 (12:49 +0200)
committerArnd Bergmann <arnd@arndb.de>
Tue, 25 Jun 2024 13:57:25 +0000 (15:57 +0200)
sparc has the wrong compat version of recv() and recvfrom() for both the
direct syscalls and socketcall().

The direct syscalls just need to use the compat version. For socketcall,
the same thing could be done, but it seems better to completely remove
the custom assembler code for it and just use the same implementation that
everyone else has.

Fixes: 1dacc76d0014 ("net/compat/wext: send different messages to compat tasks")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/sparc/kernel/sys32.S
arch/sparc/kernel/syscalls/syscall.tbl

index a45f0f31fe51ab621cc290642c85de5ced5a66d7..a3d308f2043e5fcd66d08ee6a86cff32d36fa506 100644 (file)
@@ -18,224 +18,3 @@ sys32_mmap2:
        sethi           %hi(sys_mmap), %g1
        jmpl            %g1 + %lo(sys_mmap), %g0
         sllx           %o5, 12, %o5
-
-       .align          32
-       .globl          sys32_socketcall
-sys32_socketcall:      /* %o0=call, %o1=args */
-       cmp             %o0, 1
-       bl,pn           %xcc, do_einval
-        cmp            %o0, 18
-       bg,pn           %xcc, do_einval
-        sub            %o0, 1, %o0
-       sllx            %o0, 5, %o0
-       sethi           %hi(__socketcall_table_begin), %g2
-       or              %g2, %lo(__socketcall_table_begin), %g2
-       jmpl            %g2 + %o0, %g0
-        nop
-do_einval:
-       retl
-        mov            -EINVAL, %o0
-
-       .align          32
-__socketcall_table_begin:
-
-       /* Each entry is exactly 32 bytes. */
-do_sys_socket: /* sys_socket(int, int, int) */
-1:     ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_socket), %g1
-2:     ldswa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(sys_socket), %g0
-3:      ldswa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_bind: /* sys_bind(int fd, struct sockaddr *, int) */
-4:     ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_bind), %g1
-5:     ldswa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(sys_bind), %g0
-6:      lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_connect: /* sys_connect(int, struct sockaddr *, int) */
-7:     ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_connect), %g1
-8:     ldswa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(sys_connect), %g0
-9:      lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_listen: /* sys_listen(int, int) */
-10:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_listen), %g1
-       jmpl            %g1 + %lo(sys_listen), %g0
-11:     ldswa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-       nop
-do_sys_accept: /* sys_accept(int, struct sockaddr *, int *) */
-12:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_accept), %g1
-13:    lduwa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(sys_accept), %g0
-14:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_getsockname: /* sys_getsockname(int, struct sockaddr *, int *) */
-15:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_getsockname), %g1
-16:    lduwa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(sys_getsockname), %g0
-17:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_getpeername: /* sys_getpeername(int, struct sockaddr *, int *) */
-18:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_getpeername), %g1
-19:    lduwa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(sys_getpeername), %g0
-20:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_socketpair: /* sys_socketpair(int, int, int, int *) */
-21:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_socketpair), %g1
-22:    ldswa           [%o1 + 0x8] %asi, %o2
-23:    lduwa           [%o1 + 0xc] %asi, %o3
-       jmpl            %g1 + %lo(sys_socketpair), %g0
-24:     ldswa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-do_sys_send: /* sys_send(int, void *, size_t, unsigned int) */
-25:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_send), %g1
-26:    lduwa           [%o1 + 0x8] %asi, %o2
-27:    lduwa           [%o1 + 0xc] %asi, %o3
-       jmpl            %g1 + %lo(sys_send), %g0
-28:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */
-29:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_recv), %g1
-30:    lduwa           [%o1 + 0x8] %asi, %o2
-31:    lduwa           [%o1 + 0xc] %asi, %o3
-       jmpl            %g1 + %lo(sys_recv), %g0
-32:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
-33:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_sendto), %g1
-34:    lduwa           [%o1 + 0x8] %asi, %o2
-35:    lduwa           [%o1 + 0xc] %asi, %o3
-36:    lduwa           [%o1 + 0x10] %asi, %o4
-37:    ldswa           [%o1 + 0x14] %asi, %o5
-       jmpl            %g1 + %lo(sys_sendto), %g0
-38:     lduwa          [%o1 + 0x4] %asi, %o1
-do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
-39:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_recvfrom), %g1
-40:    lduwa           [%o1 + 0x8] %asi, %o2
-41:    lduwa           [%o1 + 0xc] %asi, %o3
-42:    lduwa           [%o1 + 0x10] %asi, %o4
-43:    lduwa           [%o1 + 0x14] %asi, %o5
-       jmpl            %g1 + %lo(sys_recvfrom), %g0
-44:     lduwa          [%o1 + 0x4] %asi, %o1
-do_sys_shutdown: /* sys_shutdown(int, int) */
-45:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_shutdown), %g1
-       jmpl            %g1 + %lo(sys_shutdown), %g0
-46:     ldswa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-       nop
-do_sys_setsockopt: /* sys_setsockopt(int, int, int, char *, int) */
-47:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_setsockopt), %g1
-48:    ldswa           [%o1 + 0x8] %asi, %o2
-49:    lduwa           [%o1 + 0xc] %asi, %o3
-50:    ldswa           [%o1 + 0x10] %asi, %o4
-       jmpl            %g1 + %lo(sys_setsockopt), %g0
-51:     ldswa          [%o1 + 0x4] %asi, %o1
-       nop
-do_sys_getsockopt: /* sys_getsockopt(int, int, int, u32, u32) */
-52:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_getsockopt), %g1
-53:    ldswa           [%o1 + 0x8] %asi, %o2
-54:    lduwa           [%o1 + 0xc] %asi, %o3
-55:    lduwa           [%o1 + 0x10] %asi, %o4
-       jmpl            %g1 + %lo(sys_getsockopt), %g0
-56:     ldswa          [%o1 + 0x4] %asi, %o1
-       nop
-do_sys_sendmsg: /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */
-57:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(compat_sys_sendmsg), %g1
-58:    lduwa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(compat_sys_sendmsg), %g0
-59:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */
-60:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(compat_sys_recvmsg), %g1
-61:    lduwa           [%o1 + 0x8] %asi, %o2
-       jmpl            %g1 + %lo(compat_sys_recvmsg), %g0
-62:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-       nop
-do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
-63:    ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys_accept4), %g1
-64:    lduwa           [%o1 + 0x8] %asi, %o2
-65:    ldswa           [%o1 + 0xc] %asi, %o3
-       jmpl            %g1 + %lo(sys_accept4), %g0
-66:     lduwa          [%o1 + 0x4] %asi, %o1
-       nop
-       nop
-
-       .section        __ex_table,"a"
-       .align          4
-       .word           1b, __retl_efault, 2b, __retl_efault
-       .word           3b, __retl_efault, 4b, __retl_efault
-       .word           5b, __retl_efault, 6b, __retl_efault
-       .word           7b, __retl_efault, 8b, __retl_efault
-       .word           9b, __retl_efault, 10b, __retl_efault
-       .word           11b, __retl_efault, 12b, __retl_efault
-       .word           13b, __retl_efault, 14b, __retl_efault
-       .word           15b, __retl_efault, 16b, __retl_efault
-       .word           17b, __retl_efault, 18b, __retl_efault
-       .word           19b, __retl_efault, 20b, __retl_efault
-       .word           21b, __retl_efault, 22b, __retl_efault
-       .word           23b, __retl_efault, 24b, __retl_efault
-       .word           25b, __retl_efault, 26b, __retl_efault
-       .word           27b, __retl_efault, 28b, __retl_efault
-       .word           29b, __retl_efault, 30b, __retl_efault
-       .word           31b, __retl_efault, 32b, __retl_efault
-       .word           33b, __retl_efault, 34b, __retl_efault
-       .word           35b, __retl_efault, 36b, __retl_efault
-       .word           37b, __retl_efault, 38b, __retl_efault
-       .word           39b, __retl_efault, 40b, __retl_efault
-       .word           41b, __retl_efault, 42b, __retl_efault
-       .word           43b, __retl_efault, 44b, __retl_efault
-       .word           45b, __retl_efault, 46b, __retl_efault
-       .word           47b, __retl_efault, 48b, __retl_efault
-       .word           49b, __retl_efault, 50b, __retl_efault
-       .word           51b, __retl_efault, 52b, __retl_efault
-       .word           53b, __retl_efault, 54b, __retl_efault
-       .word           55b, __retl_efault, 56b, __retl_efault
-       .word           57b, __retl_efault, 58b, __retl_efault
-       .word           59b, __retl_efault, 60b, __retl_efault
-       .word           61b, __retl_efault, 62b, __retl_efault
-       .word           63b, __retl_efault, 64b, __retl_efault
-       .word           65b, __retl_efault, 66b, __retl_efault
-       .previous
index 5e55f73f9880a2c5823ef7faf519e99b36fb63ff..cfdfb3707c167cd26aefc6412accfefbddfef937 100644 (file)
 123    32      fchown                  sys_fchown16
 123    64      fchown                  sys_fchown
 124    common  fchmod                  sys_fchmod
-125    common  recvfrom                sys_recvfrom
+125    common  recvfrom                sys_recvfrom                    compat_sys_recvfrom
 126    32      setreuid                sys_setreuid16
 126    64      setreuid                sys_setreuid
 127    32      setregid                sys_setregid16
 204    32      readdir                 sys_old_readdir                 compat_sys_old_readdir
 204    64      readdir                 sys_nis_syscall
 205    common  readahead               sys_readahead                   compat_sys_readahead
-206    common  socketcall              sys_socketcall                  sys32_socketcall
+206    common  socketcall              sys_socketcall                  compat_sys_socketcall
 207    common  syslog                  sys_syslog
 208    common  lookup_dcookie          sys_ni_syscall
 209    common  fadvise64               sys_fadvise64                   compat_sys_fadvise64