mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 09:31:14 +00:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 updates from Martin Schwidefsky: - wire up the system calls seccomp, getrandom and memfd_create - use static system information as input to add_device_randomness - .. and three bug fixes * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/sclp: remove unnecessary XTABS flag s390/3215: fix tty output containing tabs s390: wire up memfd_create syscall s390: add system information as device randomness s390/kdump: Clear subchannel ID to signal non-CCW/SCSI IPL s390: wire up seccomp and getrandom syscalls
This commit is contained in:
commit
68e370289c
7 changed files with 54 additions and 5 deletions
|
@ -283,7 +283,10 @@
|
||||||
#define __NR_sched_setattr 345
|
#define __NR_sched_setattr 345
|
||||||
#define __NR_sched_getattr 346
|
#define __NR_sched_getattr 346
|
||||||
#define __NR_renameat2 347
|
#define __NR_renameat2 347
|
||||||
#define NR_syscalls 348
|
#define __NR_seccomp 348
|
||||||
|
#define __NR_getrandom 349
|
||||||
|
#define __NR_memfd_create 350
|
||||||
|
#define NR_syscalls 351
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There are some system calls that are not present on 64 bit, some
|
* There are some system calls that are not present on 64 bit, some
|
||||||
|
|
|
@ -214,3 +214,6 @@ COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, fla
|
||||||
COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags);
|
COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags);
|
||||||
COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags);
|
COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags);
|
||||||
COMPAT_SYSCALL_WRAP5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags);
|
COMPAT_SYSCALL_WRAP5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags);
|
||||||
|
COMPAT_SYSCALL_WRAP3(seccomp, unsigned int, op, unsigned int, flags, const char __user *, uargs)
|
||||||
|
COMPAT_SYSCALL_WRAP3(getrandom, char __user *, buf, size_t, count, unsigned int, flags)
|
||||||
|
COMPAT_SYSCALL_WRAP2(memfd_create, const char __user *, uname, unsigned int, flags)
|
||||||
|
|
|
@ -2060,6 +2060,13 @@ void s390_reset_system(void (*func)(void *), void *data)
|
||||||
S390_lowcore.program_new_psw.addr =
|
S390_lowcore.program_new_psw.addr =
|
||||||
PSW_ADDR_AMODE | (unsigned long) s390_base_pgm_handler;
|
PSW_ADDR_AMODE | (unsigned long) s390_base_pgm_handler;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear subchannel ID and number to signal new kernel that no CCW or
|
||||||
|
* SCSI IPL has been done (for kexec and kdump)
|
||||||
|
*/
|
||||||
|
S390_lowcore.subchannel_id = 0;
|
||||||
|
S390_lowcore.subchannel_nr = 0;
|
||||||
|
|
||||||
/* Store status at absolute zero */
|
/* Store status at absolute zero */
|
||||||
store_status();
|
store_status();
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
|
#include <linux/random.h>
|
||||||
#include <linux/user.h>
|
#include <linux/user.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
|
@ -61,6 +62,7 @@
|
||||||
#include <asm/diag.h>
|
#include <asm/diag.h>
|
||||||
#include <asm/os_info.h>
|
#include <asm/os_info.h>
|
||||||
#include <asm/sclp.h>
|
#include <asm/sclp.h>
|
||||||
|
#include <asm/sysinfo.h>
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -766,6 +768,7 @@ static void __init setup_hwcaps(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
get_cpu_id(&cpu_id);
|
get_cpu_id(&cpu_id);
|
||||||
|
add_device_randomness(&cpu_id, sizeof(cpu_id));
|
||||||
switch (cpu_id.machine) {
|
switch (cpu_id.machine) {
|
||||||
case 0x9672:
|
case 0x9672:
|
||||||
#if !defined(CONFIG_64BIT)
|
#if !defined(CONFIG_64BIT)
|
||||||
|
@ -803,6 +806,19 @@ static void __init setup_hwcaps(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add system information as device randomness
|
||||||
|
*/
|
||||||
|
static void __init setup_randomness(void)
|
||||||
|
{
|
||||||
|
struct sysinfo_3_2_2 *vmms;
|
||||||
|
|
||||||
|
vmms = (struct sysinfo_3_2_2 *) alloc_page(GFP_KERNEL);
|
||||||
|
if (vmms && stsi(vmms, 3, 2, 2) == 0 && vmms->count)
|
||||||
|
add_device_randomness(&vmms, vmms->count);
|
||||||
|
free_page((unsigned long) vmms);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup function called from init/main.c just after the banner
|
* Setup function called from init/main.c just after the banner
|
||||||
* was printed.
|
* was printed.
|
||||||
|
@ -901,6 +917,9 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
|
||||||
/* Setup zfcpdump support */
|
/* Setup zfcpdump support */
|
||||||
setup_zfcpdump();
|
setup_zfcpdump();
|
||||||
|
|
||||||
|
/* Add system specific data to the random pool */
|
||||||
|
setup_randomness();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_32BIT
|
#ifdef CONFIG_32BIT
|
||||||
|
|
|
@ -356,3 +356,6 @@ SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module)
|
||||||
SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */
|
SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */
|
||||||
SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr)
|
SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr)
|
||||||
SYSCALL(sys_renameat2,sys_renameat2,compat_sys_renameat2)
|
SYSCALL(sys_renameat2,sys_renameat2,compat_sys_renameat2)
|
||||||
|
SYSCALL(sys_seccomp,sys_seccomp,compat_sys_seccomp)
|
||||||
|
SYSCALL(sys_getrandom,sys_getrandom,compat_sys_getrandom)
|
||||||
|
SYSCALL(sys_memfd_create,sys_memfd_create,compat_sys_memfd_create) /* 350 */
|
||||||
|
|
|
@ -1035,12 +1035,26 @@ static int tty3215_write(struct tty_struct * tty,
|
||||||
const unsigned char *buf, int count)
|
const unsigned char *buf, int count)
|
||||||
{
|
{
|
||||||
struct raw3215_info *raw;
|
struct raw3215_info *raw;
|
||||||
|
int i, written;
|
||||||
|
|
||||||
if (!tty)
|
if (!tty)
|
||||||
return 0;
|
return 0;
|
||||||
raw = (struct raw3215_info *) tty->driver_data;
|
raw = (struct raw3215_info *) tty->driver_data;
|
||||||
raw3215_write(raw, buf, count);
|
written = count;
|
||||||
return count;
|
while (count > 0) {
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
if (buf[i] == '\t' || buf[i] == '\n')
|
||||||
|
break;
|
||||||
|
raw3215_write(raw, buf, i);
|
||||||
|
count -= i;
|
||||||
|
buf += i;
|
||||||
|
if (count > 0) {
|
||||||
|
raw3215_putchar(raw, *buf);
|
||||||
|
count--;
|
||||||
|
buf++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return written;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1188,7 +1202,7 @@ static int __init tty3215_init(void)
|
||||||
driver->subtype = SYSTEM_TYPE_TTY;
|
driver->subtype = SYSTEM_TYPE_TTY;
|
||||||
driver->init_termios = tty_std_termios;
|
driver->init_termios = tty_std_termios;
|
||||||
driver->init_termios.c_iflag = IGNBRK | IGNPAR;
|
driver->init_termios.c_iflag = IGNBRK | IGNPAR;
|
||||||
driver->init_termios.c_oflag = ONLCR | XTABS;
|
driver->init_termios.c_oflag = ONLCR;
|
||||||
driver->init_termios.c_lflag = ISIG;
|
driver->init_termios.c_lflag = ISIG;
|
||||||
driver->flags = TTY_DRIVER_REAL_RAW;
|
driver->flags = TTY_DRIVER_REAL_RAW;
|
||||||
tty_set_operations(driver, &tty3215_ops);
|
tty_set_operations(driver, &tty3215_ops);
|
||||||
|
|
|
@ -559,7 +559,7 @@ sclp_tty_init(void)
|
||||||
driver->subtype = SYSTEM_TYPE_TTY;
|
driver->subtype = SYSTEM_TYPE_TTY;
|
||||||
driver->init_termios = tty_std_termios;
|
driver->init_termios = tty_std_termios;
|
||||||
driver->init_termios.c_iflag = IGNBRK | IGNPAR;
|
driver->init_termios.c_iflag = IGNBRK | IGNPAR;
|
||||||
driver->init_termios.c_oflag = ONLCR | XTABS;
|
driver->init_termios.c_oflag = ONLCR;
|
||||||
driver->init_termios.c_lflag = ISIG | ECHO;
|
driver->init_termios.c_lflag = ISIG | ECHO;
|
||||||
driver->flags = TTY_DRIVER_REAL_RAW;
|
driver->flags = TTY_DRIVER_REAL_RAW;
|
||||||
tty_set_operations(driver, &sclp_ops);
|
tty_set_operations(driver, &sclp_ops);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue