Created
November 26, 2015 13:39
-
-
Save dvyukov/64c0b2dfe64047d90edd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
vmlinux: file format elf64-x86-64 | |
Disassembly of section .text: | |
ffffffff829d99d0 <tty_ioctl>: | |
/* | |
* Split this up, as gcc can choke on it otherwise.. | |
*/ | |
long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |
{ | |
ffffffff829d99d0: 55 push %rbp | |
ffffffff829d99d1: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d99d8: fc ff df | |
ffffffff829d99db: 48 89 e5 mov %rsp,%rbp | |
ffffffff829d99de: 41 57 push %r15 | |
ffffffff829d99e0: 41 56 push %r14 | |
ffffffff829d99e2: 41 55 push %r13 | |
ffffffff829d99e4: 41 54 push %r12 | |
ffffffff829d99e6: 49 89 fd mov %rdi,%r13 | |
ffffffff829d99e9: 53 push %rbx | |
ffffffff829d99ea: 48 81 c7 88 01 00 00 add $0x188,%rdi | |
ffffffff829d99f1: 41 89 f6 mov %esi,%r14d | |
ffffffff829d99f4: 48 81 ec c0 01 00 00 sub $0x1c0,%rsp | |
ffffffff829d99fb: 48 89 95 30 fe ff ff mov %rdx,-0x1d0(%rbp) | |
ffffffff829d9a02: 48 8d 95 38 fe ff ff lea -0x1c8(%rbp),%rdx | |
ffffffff829d9a09: 48 c7 85 38 fe ff ff movq $0x41b58ab3,-0x1c8(%rbp) | |
ffffffff829d9a10: b3 8a b5 41 | |
ffffffff829d9a14: 48 c7 85 40 fe ff ff movq $0xffffffff85f5e300,-0x1c0(%rbp) | |
ffffffff829d9a1b: 00 e3 f5 85 | |
ffffffff829d9a1f: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9a23: 48 c7 85 48 fe ff ff movq $0xffffffff829d99d0,-0x1b8(%rbp) | |
ffffffff829d9a2a: d0 99 9d 82 | |
ffffffff829d9a2e: 49 89 d4 mov %rdx,%r12 | |
ffffffff829d9a31: 48 01 c2 add %rax,%rdx | |
ffffffff829d9a34: c7 02 f1 f1 f1 f1 movl $0xf1f1f1f1,(%rdx) | |
ffffffff829d9a3a: c7 42 04 01 f4 f4 f4 movl $0xf4f4f401,0x4(%rdx) | |
ffffffff829d9a41: c7 42 08 f2 f2 f2 f2 movl $0xf2f2f2f2,0x8(%rdx) | |
ffffffff829d9a48: c7 42 0c 01 f4 f4 f4 movl $0xf4f4f401,0xc(%rdx) | |
ffffffff829d9a4f: c7 42 10 f2 f2 f2 f2 movl $0xf2f2f2f2,0x10(%rdx) | |
ffffffff829d9a56: c7 42 14 00 f4 f4 f4 movl $0xf4f4f400,0x14(%rdx) | |
ffffffff829d9a5d: c7 42 18 f2 f2 f2 f2 movl $0xf2f2f2f2,0x18(%rdx) | |
ffffffff829d9a64: c7 42 1c 00 00 f4 f4 movl $0xf4f40000,0x1c(%rdx) | |
ffffffff829d9a6b: c7 42 20 f2 f2 f2 f2 movl $0xf2f2f2f2,0x20(%rdx) | |
ffffffff829d9a72: c7 42 2c 00 00 f4 f4 movl $0xf4f40000,0x2c(%rdx) | |
ffffffff829d9a79: c7 42 30 f3 f3 f3 f3 movl $0xf3f3f3f3,0x30(%rdx) | |
ffffffff829d9a80: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9a83: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9a87: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9a8b: 0f 85 88 1d 00 00 jne ffffffff829db819 <tty_ioctl+0x1e49> | |
ffffffff829d9a91: 49 8b 9d 88 01 00 00 mov 0x188(%r13),%rbx | |
kfree(tty); | |
} | |
static inline struct tty_struct *file_tty(struct file *file) | |
{ | |
return ((struct tty_file_private *)file->private_data)->tty; | |
ffffffff829d9a98: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9a9f: fc ff df | |
ffffffff829d9aa2: 48 89 da mov %rbx,%rdx | |
ffffffff829d9aa5: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9aa9: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9aad: 0f 85 52 1c 00 00 jne ffffffff829db705 <tty_ioctl+0x1d35> | |
ffffffff829d9ab3: 49 8d 7d 20 lea 0x20(%r13),%rdi | |
ffffffff829d9ab7: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9abe: fc ff df | |
ffffffff829d9ac1: 48 8b 1b mov (%rbx),%rbx | |
ffffffff829d9ac4: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9ac7: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9acb: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9acf: 0f 85 4e 1d 00 00 jne ffffffff829db823 <tty_ioctl+0x1e53> | |
struct tty_struct *real_tty; | |
void __user *p = (void __user *)arg; | |
int retval; | |
struct tty_ldisc *ld; | |
if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl")) | |
ffffffff829d9ad5: 49 8b 75 20 mov 0x20(%r13),%rsi | |
ffffffff829d9ad9: 48 c7 c2 60 23 61 85 mov $0xffffffff85612360,%rdx | |
ffffffff829d9ae0: 48 89 df mov %rbx,%rdi | |
ffffffff829d9ae3: e8 18 d7 ff ff callq ffffffff829d7200 <tty_paranoia_check> | |
ffffffff829d9ae8: 85 c0 test %eax,%eax | |
ffffffff829d9aea: 0f 85 6d 06 00 00 jne ffffffff829da15d <tty_ioctl+0x78d> | |
* if pty, return the slave side (real_tty) | |
* otherwise, return self | |
*/ | |
static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty) | |
{ | |
if (tty->driver->type == TTY_DRIVER_TYPE_PTY && | |
ffffffff829d9af0: 48 8d 7b 10 lea 0x10(%rbx),%rdi | |
ffffffff829d9af4: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9afb: fc ff df | |
ffffffff829d9afe: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9b01: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9b05: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9b09: 0f 85 f6 1c 00 00 jne ffffffff829db805 <tty_ioctl+0x1e35> | |
ffffffff829d9b0f: 4c 8b 7b 10 mov 0x10(%rbx),%r15 | |
ffffffff829d9b13: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9b1a: fc ff df | |
ffffffff829d9b1d: 49 8d 7f 38 lea 0x38(%r15),%rdi | |
ffffffff829d9b21: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9b24: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9b28: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax | |
ffffffff829d9b2c: 84 c0 test %al,%al | |
ffffffff829d9b2e: 74 08 je ffffffff829d9b38 <tty_ioctl+0x168> | |
ffffffff829d9b30: 3c 03 cmp $0x3,%al | |
ffffffff829d9b32: 0f 8e c7 09 00 00 jle ffffffff829da4ff <tty_ioctl+0xb2f> | |
ffffffff829d9b38: 41 81 7f 38 04 00 01 cmpl $0x10004,0x38(%r15) | |
ffffffff829d9b3f: 00 | |
kfree(tty); | |
} | |
static inline struct tty_struct *file_tty(struct file *file) | |
{ | |
return ((struct tty_file_private *)file->private_data)->tty; | |
ffffffff829d9b40: 49 89 da mov %rbx,%r10 | |
* if pty, return the slave side (real_tty) | |
* otherwise, return self | |
*/ | |
static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty) | |
{ | |
if (tty->driver->type == TTY_DRIVER_TYPE_PTY && | |
ffffffff829d9b43: 0f 84 10 02 00 00 je ffffffff829d9d59 <tty_ioctl+0x389> | |
ffffffff829d9b49: 41 8d 8e f7 ab ff ff lea -0x5409(%r14),%ecx | |
ffffffff829d9b50: 83 f9 1f cmp $0x1f,%ecx | |
ffffffff829d9b53: 0f 87 f3 00 00 00 ja ffffffff829d9c4c <tty_ioctl+0x27c> | |
ffffffff829d9b59: b8 01 00 00 00 mov $0x1,%eax | |
ffffffff829d9b5e: 48 d3 e0 shl %cl,%rax | |
ffffffff829d9b61: a9 01 00 00 d4 test $0xd4000001,%eax | |
ffffffff829d9b66: 0f 84 e0 00 00 00 je ffffffff829d9c4c <tty_ioctl+0x27c> | |
DECLARE_PER_CPU(struct task_struct *, current_task); | |
static __always_inline struct task_struct *get_current(void) | |
{ | |
return this_cpu_read_stable(current_task); | |
ffffffff829d9b6c: 65 4c 8b 3c 25 c0 3f mov %gs:0x13fc0,%r15 | |
ffffffff829d9b73: 01 00 | |
{ | |
unsigned long flags; | |
struct pid *pgrp, *tty_pgrp; | |
int ret = 0; | |
if (current->signal->tty != tty) | |
ffffffff829d9b75: 49 8d bf 48 06 00 00 lea 0x648(%r15),%rdi | |
ffffffff829d9b7c: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9b83: fc ff df | |
ffffffff829d9b86: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9b89: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9b8d: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9b91: 0f 85 1e 1d 00 00 jne ffffffff829db8b5 <tty_ioctl+0x1ee5> | |
ffffffff829d9b97: 4d 8b bf 48 06 00 00 mov 0x648(%r15),%r15 | |
ffffffff829d9b9e: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9ba5: fc ff df | |
ffffffff829d9ba8: 49 8d bf d0 01 00 00 lea 0x1d0(%r15),%rdi | |
ffffffff829d9baf: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9bb2: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9bb6: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9bba: 0f 85 0d 1d 00 00 jne ffffffff829db8cd <tty_ioctl+0x1efd> | |
ffffffff829d9bc0: 49 3b 9f d0 01 00 00 cmp 0x1d0(%r15),%rbx | |
ffffffff829d9bc7: 0f 84 e3 14 00 00 je ffffffff829db0b0 <tty_ioctl+0x16e0> | |
case TCSBRK: | |
case TCSBRKP: | |
retval = tty_check_change(tty); | |
if (retval) | |
return retval; | |
if (cmd != TIOCCBRK) { | |
ffffffff829d9bcd: 41 81 fe 28 54 00 00 cmp $0x5428,%r14d | |
ffffffff829d9bd4: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829d9bdb: 0f 84 88 05 00 00 je ffffffff829da169 <tty_ioctl+0x799> | |
tty_wait_until_sent(tty, 0); | |
ffffffff829d9be1: 31 f6 xor %esi,%esi | |
ffffffff829d9be3: 48 89 df mov %rbx,%rdi | |
ffffffff829d9be6: e8 45 4f 01 00 callq ffffffff829eeb30 <tty_wait_until_sent> | |
ffffffff829d9beb: 65 4c 8b 3c 25 c0 3f mov %gs:0x13fc0,%r15 | |
ffffffff829d9bf2: 01 00 | |
return test_and_clear_ti_thread_flag(task_thread_info(tsk), flag); | |
} | |
static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag) | |
{ | |
return test_ti_thread_flag(task_thread_info(tsk), flag); | |
ffffffff829d9bf4: 49 8d 7f 08 lea 0x8(%r15),%rdi | |
ffffffff829d9bf8: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9bff: fc ff df | |
ffffffff829d9c02: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829d9c09: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9c0c: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9c10: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9c14: 0f 85 10 1b 00 00 jne ffffffff829db72a <tty_ioctl+0x1d5a> | |
ffffffff829d9c1a: 4d 8b 7f 08 mov 0x8(%r15),%r15 | |
} | |
static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr) | |
{ | |
return ((1UL << (nr & (BITS_PER_LONG-1))) & | |
(addr[nr >> _BITOPS_LONG_SHIFT])) != 0; | |
ffffffff829d9c1e: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9c25: fc ff df | |
ffffffff829d9c28: 49 8d 7f 08 lea 0x8(%r15),%rdi | |
ffffffff829d9c2c: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9c2f: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9c33: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9c37: 0f 85 d5 1a 00 00 jne ffffffff829db712 <tty_ioctl+0x1d42> | |
ffffffff829d9c3d: 49 8b 47 08 mov 0x8(%r15),%rax | |
if (signal_pending(current)) | |
return -EINTR; | |
ffffffff829d9c41: 49 c7 c7 fc ff ff ff mov $0xfffffffffffffffc,%r15 | |
retval = tty_check_change(tty); | |
if (retval) | |
return retval; | |
if (cmd != TIOCCBRK) { | |
tty_wait_until_sent(tty, 0); | |
if (signal_pending(current)) | |
ffffffff829d9c48: a8 04 test $0x4,%al | |
ffffffff829d9c4a: 75 78 jne ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829d9c4c: 41 81 fe 1d 54 00 00 cmp $0x541d,%r14d | |
ffffffff829d9c53: 0f 84 f9 0a 00 00 je ffffffff829da752 <tty_ioctl+0xd82> | |
ffffffff829d9c59: 0f 86 b5 00 00 00 jbe ffffffff829d9d14 <tty_ioctl+0x344> | |
ffffffff829d9c5f: 41 81 fe 27 54 00 00 cmp $0x5427,%r14d | |
ffffffff829d9c66: 0f 84 8b 0b 00 00 je ffffffff829da7f7 <tty_ioctl+0xe27> | |
ffffffff829d9c6c: 0f 87 a8 01 00 00 ja ffffffff829d9e1a <tty_ioctl+0x44a> | |
ffffffff829d9c72: 41 81 fe 22 54 00 00 cmp $0x5422,%r14d | |
ffffffff829d9c79: 0f 84 bc 13 00 00 je ffffffff829db03b <tty_ioctl+0x166b> | |
ffffffff829d9c7f: 0f 86 3d 04 00 00 jbe ffffffff829da0c2 <tty_ioctl+0x6f2> | |
ffffffff829d9c85: 41 81 fe 24 54 00 00 cmp $0x5424,%r14d | |
ffffffff829d9c8c: 0f 84 15 13 00 00 je ffffffff829dafa7 <tty_ioctl+0x15d7> | |
ffffffff829d9c92: 0f 82 d0 07 00 00 jb ffffffff829da468 <tty_ioctl+0xa98> | |
ffffffff829d9c98: 41 81 fe 25 54 00 00 cmp $0x5425,%r14d | |
ffffffff829d9c9f: 0f 85 a0 02 00 00 jne ffffffff829d9f45 <tty_ioctl+0x575> | |
*/ | |
if (!arg) | |
return send_break(tty, 250); | |
return 0; | |
case TCSBRKP: /* support for POSIX tcsendbreak() */ | |
return send_break(tty, arg ? arg*100 : 250); | |
ffffffff829d9ca5: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829d9cac: be fa 00 00 00 mov $0xfa,%esi | |
ffffffff829d9cb1: 48 85 c0 test %rax,%rax | |
ffffffff829d9cb4: 74 03 je ffffffff829d9cb9 <tty_ioctl+0x2e9> | |
ffffffff829d9cb6: 6b f0 64 imul $0x64,%eax,%esi | |
ffffffff829d9cb9: 48 89 df mov %rbx,%rdi | |
ffffffff829d9cbc: e8 7f a1 ff ff callq ffffffff829d3e40 <send_break> | |
ffffffff829d9cc1: 4c 63 f8 movslq %eax,%r15 | |
/* | |
* Split this up, as gcc can choke on it otherwise.. | |
*/ | |
long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |
{ | |
ffffffff829d9cc4: 48 ba 00 00 00 00 00 movabs $0xdffffc0000000000,%rdx | |
ffffffff829d9ccb: fc ff df | |
if (retval == -ENOIOCTLCMD) | |
retval = -ENOTTY; | |
} | |
tty_ldisc_deref(ld); | |
return retval; | |
} | |
ffffffff829d9cce: 4c 89 f8 mov %r15,%rax | |
/* | |
* Split this up, as gcc can choke on it otherwise.. | |
*/ | |
long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |
{ | |
ffffffff829d9cd1: 4c 01 e2 add %r12,%rdx | |
ffffffff829d9cd4: 48 c7 02 00 00 00 00 movq $0x0,(%rdx) | |
ffffffff829d9cdb: 48 c7 42 08 00 00 00 movq $0x0,0x8(%rdx) | |
ffffffff829d9ce2: 00 | |
ffffffff829d9ce3: 48 c7 42 10 00 00 00 movq $0x0,0x10(%rdx) | |
ffffffff829d9cea: 00 | |
ffffffff829d9ceb: 48 c7 42 18 00 00 00 movq $0x0,0x18(%rdx) | |
ffffffff829d9cf2: 00 | |
ffffffff829d9cf3: c7 42 20 00 00 00 00 movl $0x0,0x20(%rdx) | |
ffffffff829d9cfa: 48 c7 42 2c 00 00 00 movq $0x0,0x2c(%rdx) | |
ffffffff829d9d01: 00 | |
if (retval == -ENOIOCTLCMD) | |
retval = -ENOTTY; | |
} | |
tty_ldisc_deref(ld); | |
return retval; | |
} | |
ffffffff829d9d02: 48 81 c4 c0 01 00 00 add $0x1c0,%rsp | |
ffffffff829d9d09: 5b pop %rbx | |
ffffffff829d9d0a: 41 5c pop %r12 | |
ffffffff829d9d0c: 41 5d pop %r13 | |
ffffffff829d9d0e: 41 5e pop %r14 | |
ffffffff829d9d10: 41 5f pop %r15 | |
ffffffff829d9d12: 5d pop %rbp | |
ffffffff829d9d13: c3 retq | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829d9d14: 41 81 fe 10 54 00 00 cmp $0x5410,%r14d | |
ffffffff829d9d1b: 0f 84 3d 0b 00 00 je ffffffff829da85e <tty_ioctl+0xe8e> | |
ffffffff829d9d21: 77 64 ja ffffffff829d9d87 <tty_ioctl+0x3b7> | |
ffffffff829d9d23: 41 81 fe 0c 54 00 00 cmp $0x540c,%r14d | |
ffffffff829d9d2a: 0f 84 bf 11 00 00 je ffffffff829daeef <tty_ioctl+0x151f> | |
ffffffff829d9d30: 0f 86 df 01 00 00 jbe ffffffff829d9f15 <tty_ioctl+0x545> | |
ffffffff829d9d36: 41 81 fe 0e 54 00 00 cmp $0x540e,%r14d | |
ffffffff829d9d3d: 0f 84 81 0e 00 00 je ffffffff829dabc4 <tty_ioctl+0x11f4> | |
ffffffff829d9d43: 0f 87 d6 06 00 00 ja ffffffff829da41f <tty_ioctl+0xa4f> | |
*/ | |
static __always_inline void | |
clear_bit(long nr, volatile unsigned long *addr) | |
{ | |
if (IS_IMMEDIATE(nr)) { | |
asm volatile(LOCK_PREFIX "andb %1,%0" | |
ffffffff829d9d49: f0 80 a3 58 04 00 00 lock andb $0xf7,0x458(%rbx) | |
ffffffff829d9d50: f7 | |
case TIOCEXCL: | |
set_bit(TTY_EXCLUSIVE, &tty->flags); | |
return 0; | |
case TIOCNXCL: | |
clear_bit(TTY_EXCLUSIVE, &tty->flags); | |
return 0; | |
ffffffff829d9d51: 45 31 ff xor %r15d,%r15d | |
ffffffff829d9d54: e9 6b ff ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
*/ | |
static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty) | |
{ | |
if (tty->driver->type == TTY_DRIVER_TYPE_PTY && | |
tty->driver->subtype == PTY_TYPE_MASTER) | |
tty = tty->link; | |
ffffffff829d9d59: 48 8d bb 90 04 00 00 lea 0x490(%rbx),%rdi | |
ffffffff829d9d60: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9d67: fc ff df | |
ffffffff829d9d6a: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9d6d: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9d71: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9d75: 0f 85 94 1a 00 00 jne ffffffff829db80f <tty_ioctl+0x1e3f> | |
ffffffff829d9d7b: 4c 8b 93 90 04 00 00 mov 0x490(%rbx),%r10 | |
ffffffff829d9d82: e9 c2 fd ff ff jmpq ffffffff829d9b49 <tty_ioctl+0x179> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829d9d87: 41 81 fe 14 54 00 00 cmp $0x5414,%r14d | |
ffffffff829d9d8e: 0f 84 6b 11 00 00 je ffffffff829daeff <tty_ioctl+0x152f> | |
ffffffff829d9d94: 0f 87 1c 02 00 00 ja ffffffff829d9fb6 <tty_ioctl+0x5e6> | |
ffffffff829d9d9a: 41 81 fe 12 54 00 00 cmp $0x5412,%r14d | |
ffffffff829d9da1: 0f 84 c3 04 00 00 je ffffffff829da26a <tty_ioctl+0x89a> | |
ffffffff829d9da7: 41 81 fe 13 54 00 00 cmp $0x5413,%r14d | |
ffffffff829d9dae: 0f 85 91 01 00 00 jne ffffffff829d9f45 <tty_ioctl+0x575> | |
static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg) | |
{ | |
int err; | |
mutex_lock(&tty->winsize_mutex); | |
ffffffff829d9db4: 49 8d 9a b8 02 00 00 lea 0x2b8(%r10),%rbx | |
ffffffff829d9dbb: 31 f6 xor %esi,%esi | |
ffffffff829d9dbd: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829d9dc4: 48 89 df mov %rbx,%rdi | |
ffffffff829d9dc7: e8 04 5b 8c 02 callq ffffffff8529f8d0 <mutex_lock_nested> | |
static inline unsigned long __must_check | |
copy_to_user(void __user *to, const void *from, unsigned long n) | |
{ | |
int sz = __compiletime_object_size(from); | |
might_fault(); | |
ffffffff829d9dcc: be dc 02 00 00 mov $0x2dc,%esi | |
ffffffff829d9dd1: 48 c7 c7 c0 24 61 85 mov $0xffffffff856124c0,%rdi | |
ffffffff829d9dd8: e8 e3 07 bb fe callq ffffffff8158a5c0 <__might_fault> | |
err = copy_to_user(arg, &tty->winsize, sizeof(*arg)); | |
ffffffff829d9ddd: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
/* See the comment in copy_from_user() above. */ | |
if (likely(sz < 0 || sz >= n)) | |
n = _copy_to_user(to, from, n); | |
ffffffff829d9de4: 48 8b bd 30 fe ff ff mov -0x1d0(%rbp),%rdi | |
ffffffff829d9deb: ba 08 00 00 00 mov $0x8,%edx | |
ffffffff829d9df0: 49 8d b2 64 04 00 00 lea 0x464(%r10),%rsi | |
ffffffff829d9df7: e8 84 a3 d1 ff callq ffffffff826f4180 <_copy_to_user> | |
mutex_unlock(&tty->winsize_mutex); | |
ffffffff829d9dfc: 48 89 df mov %rbx,%rdi | |
ffffffff829d9dff: 49 89 c5 mov %rax,%r13 | |
ffffffff829d9e02: e8 f9 8b 8c 02 callq ffffffff852a2a00 <mutex_unlock> | |
return err ? -EFAULT: 0; | |
ffffffff829d9e07: 41 83 fd 01 cmp $0x1,%r13d | |
ffffffff829d9e0b: 4d 19 ff sbb %r15,%r15 | |
ffffffff829d9e0e: 49 f7 d7 not %r15 | |
ffffffff829d9e11: 49 83 e7 f2 and $0xfffffffffffffff2,%r15 | |
ffffffff829d9e15: e9 aa fe ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829d9e1a: 41 81 fe 37 54 00 00 cmp $0x5437,%r14d | |
ffffffff829d9e21: 0f 84 00 09 00 00 je ffffffff829da727 <tty_ioctl+0xd57> | |
ffffffff829d9e27: 0f 86 74 07 00 00 jbe ffffffff829da5a1 <tty_ioctl+0xbd1> | |
ffffffff829d9e2d: 41 81 fe 32 54 04 80 cmp $0x80045432,%r14d | |
ffffffff829d9e34: 0f 84 11 08 00 00 je ffffffff829da64b <tty_ioctl+0xc7b> | |
ffffffff829d9e3a: 41 81 fe 40 54 04 80 cmp $0x80045440,%r14d | |
ffffffff829d9e41: 0f 84 5f 06 00 00 je ffffffff829da4a6 <tty_ioctl+0xad6> | |
ffffffff829d9e47: 41 81 fe 5d 54 00 00 cmp $0x545d,%r14d | |
ffffffff829d9e4e: 0f 85 f1 00 00 00 jne ffffffff829d9f45 <tty_ioctl+0x575> | |
static int tty_tiocgicount(struct tty_struct *tty, void __user *arg) | |
{ | |
int retval = -EINVAL; | |
struct serial_icounter_struct icount; | |
memset(&icount, 0, sizeof(icount)); | |
ffffffff829d9e54: 4c 8d bd 58 ff ff ff lea -0xa8(%rbp),%r15 | |
ffffffff829d9e5b: ba 50 00 00 00 mov $0x50,%edx | |
ffffffff829d9e60: 31 f6 xor %esi,%esi | |
ffffffff829d9e62: 4c 89 ff mov %r15,%rdi | |
ffffffff829d9e65: e8 a6 f8 c1 fe callq ffffffff815f9710 <memset> | |
if (tty->ops->get_icount) | |
ffffffff829d9e6a: 48 8d 53 18 lea 0x18(%rbx),%rdx | |
ffffffff829d9e6e: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9e75: fc ff df | |
ffffffff829d9e78: 48 89 d1 mov %rdx,%rcx | |
ffffffff829d9e7b: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829d9e7f: 80 3c 01 00 cmpb $0x0,(%rcx,%rax,1) | |
ffffffff829d9e83: 0f 85 ee 1a 00 00 jne ffffffff829db977 <tty_ioctl+0x1fa7> | |
ffffffff829d9e89: 48 8b 43 18 mov 0x18(%rbx),%rax | |
ffffffff829d9e8d: 48 b9 00 00 00 00 00 movabs $0xdffffc0000000000,%rcx | |
ffffffff829d9e94: fc ff df | |
ffffffff829d9e97: 48 8d b8 e8 00 00 00 lea 0xe8(%rax),%rdi | |
ffffffff829d9e9e: 48 89 fe mov %rdi,%rsi | |
ffffffff829d9ea1: 48 c1 ee 03 shr $0x3,%rsi | |
ffffffff829d9ea5: 80 3c 0e 00 cmpb $0x0,(%rsi,%rcx,1) | |
ffffffff829d9ea9: 0f 85 a2 1a 00 00 jne ffffffff829db951 <tty_ioctl+0x1f81> | |
ffffffff829d9eaf: 48 8b 80 e8 00 00 00 mov 0xe8(%rax),%rax | |
ffffffff829d9eb6: 48 85 c0 test %rax,%rax | |
ffffffff829d9eb9: 0f 84 8a 00 00 00 je ffffffff829d9f49 <tty_ioctl+0x579> | |
ffffffff829d9ebf: 48 89 95 28 fe ff ff mov %rdx,-0x1d8(%rbp) | |
retval = tty->ops->get_icount(tty, &icount); | |
ffffffff829d9ec6: 4c 89 fe mov %r15,%rsi | |
ffffffff829d9ec9: 48 89 df mov %rbx,%rdi | |
ffffffff829d9ecc: ff d0 callq *%rax | |
if (retval != 0) | |
ffffffff829d9ece: 85 c0 test %eax,%eax | |
ffffffff829d9ed0: 48 8b 95 28 fe ff ff mov -0x1d8(%rbp),%rdx | |
ffffffff829d9ed7: 0f 85 2c 12 00 00 jne ffffffff829db109 <tty_ioctl+0x1739> | |
static inline unsigned long __must_check | |
copy_to_user(void __user *to, const void *from, unsigned long n) | |
{ | |
int sz = __compiletime_object_size(from); | |
might_fault(); | |
ffffffff829d9edd: be dc 02 00 00 mov $0x2dc,%esi | |
ffffffff829d9ee2: 48 c7 c7 c0 24 61 85 mov $0xffffffff856124c0,%rdi | |
ffffffff829d9ee9: e8 d2 06 bb fe callq ffffffff8158a5c0 <__might_fault> | |
/* See the comment in copy_from_user() above. */ | |
if (likely(sz < 0 || sz >= n)) | |
n = _copy_to_user(to, from, n); | |
ffffffff829d9eee: 48 8b bd 30 fe ff ff mov -0x1d0(%rbp),%rdi | |
ffffffff829d9ef5: 4c 89 fe mov %r15,%rsi | |
ffffffff829d9ef8: ba 50 00 00 00 mov $0x50,%edx | |
ffffffff829d9efd: e8 7e a2 d1 ff callq ffffffff826f4180 <_copy_to_user> | |
return retval; | |
if (copy_to_user(arg, &icount, sizeof(icount))) | |
ffffffff829d9f02: 48 83 f8 01 cmp $0x1,%rax | |
ffffffff829d9f06: 4d 19 ff sbb %r15,%r15 | |
ffffffff829d9f09: 49 f7 d7 not %r15 | |
ffffffff829d9f0c: 49 83 e7 f2 and $0xfffffffffffffff2,%r15 | |
ffffffff829d9f10: e9 af fd ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829d9f15: 41 81 fe 09 54 00 00 cmp $0x5409,%r14d | |
ffffffff829d9f1c: 0f 84 32 03 00 00 je ffffffff829da254 <tty_ioctl+0x884> | |
ffffffff829d9f22: 41 81 fe 0b 54 00 00 cmp $0x540b,%r14d | |
ffffffff829d9f29: 75 1a jne ffffffff829d9f45 <tty_ioctl+0x575> | |
/* For the moment allow fall through to the old method */ | |
if (retval != -EINVAL) | |
return retval; | |
break; | |
case TCFLSH: | |
switch (arg) { | |
ffffffff829d9f2b: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829d9f32: 48 85 c0 test %rax,%rax | |
ffffffff829d9f35: 0f 84 65 12 00 00 je ffffffff829db1a0 <tty_ioctl+0x17d0> | |
ffffffff829d9f3b: 48 83 f8 02 cmp $0x2,%rax | |
ffffffff829d9f3f: 0f 84 5b 12 00 00 je ffffffff829db1a0 <tty_ioctl+0x17d0> | |
ffffffff829d9f45: 48 8d 53 18 lea 0x18(%rbx),%rdx | |
break; | |
case TIOCSSERIAL: | |
tty_warn_deprecated_flags(p); | |
break; | |
} | |
if (tty->ops->ioctl) { | |
ffffffff829d9f49: 48 89 d1 mov %rdx,%rcx | |
ffffffff829d9f4c: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9f53: fc ff df | |
ffffffff829d9f56: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829d9f5a: 80 3c 01 00 cmpb $0x0,(%rcx,%rax,1) | |
ffffffff829d9f5e: 0f 85 34 17 00 00 jne ffffffff829db698 <tty_ioctl+0x1cc8> | |
ffffffff829d9f64: 4c 8b 7b 18 mov 0x18(%rbx),%r15 | |
ffffffff829d9f68: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9f6f: fc ff df | |
ffffffff829d9f72: 49 8d 7f 60 lea 0x60(%r15),%rdi | |
ffffffff829d9f76: 48 89 fa mov %rdi,%rdx | |
ffffffff829d9f79: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9f7d: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9f81: 0f 85 07 17 00 00 jne ffffffff829db68e <tty_ioctl+0x1cbe> | |
ffffffff829d9f87: 49 8b 47 60 mov 0x60(%r15),%rax | |
ffffffff829d9f8b: 48 85 c0 test %rax,%rax | |
ffffffff829d9f8e: 0f 84 75 05 00 00 je ffffffff829da509 <tty_ioctl+0xb39> | |
retval = tty->ops->ioctl(tty, cmd, arg); | |
ffffffff829d9f94: 48 8b 95 30 fe ff ff mov -0x1d0(%rbp),%rdx | |
ffffffff829d9f9b: 44 89 f6 mov %r14d,%esi | |
ffffffff829d9f9e: 48 89 df mov %rbx,%rdi | |
ffffffff829d9fa1: ff d0 callq *%rax | |
if (retval != -ENOIOCTLCMD) | |
ffffffff829d9fa3: 3d fd fd ff ff cmp $0xfffffdfd,%eax | |
ffffffff829d9fa8: 0f 84 5b 05 00 00 je ffffffff829da509 <tty_ioctl+0xb39> | |
if (tty->ops->tiocmget) { | |
retval = tty->ops->tiocmget(tty); | |
if (retval >= 0) | |
retval = put_user(retval, p); | |
ffffffff829d9fae: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829d9fb1: e9 0e fd ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829d9fb6: 41 81 fe 15 54 00 00 cmp $0x5415,%r14d | |
ffffffff829d9fbd: 0f 84 d1 03 00 00 je ffffffff829da394 <tty_ioctl+0x9c4> | |
ffffffff829d9fc3: 41 81 fe 18 54 00 00 cmp $0x5418,%r14d | |
ffffffff829d9fca: 0f 87 75 ff ff ff ja ffffffff829d9f45 <tty_ioctl+0x575> | |
unsigned __user *p) | |
{ | |
int retval; | |
unsigned int set, clear, val; | |
if (tty->ops->tiocmset == NULL) | |
ffffffff829d9fd0: 4c 8d 7b 18 lea 0x18(%rbx),%r15 | |
ffffffff829d9fd4: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829d9fdb: fc ff df | |
ffffffff829d9fde: 4c 89 fa mov %r15,%rdx | |
ffffffff829d9fe1: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829d9fe5: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829d9fe9: 0f 85 e1 17 00 00 jne ffffffff829db7d0 <tty_ioctl+0x1e00> | |
ffffffff829d9fef: 4c 8b 6b 18 mov 0x18(%rbx),%r13 | |
ffffffff829d9ff3: 48 ba 00 00 00 00 00 movabs $0xdffffc0000000000,%rdx | |
ffffffff829d9ffa: fc ff df | |
ffffffff829d9ffd: 49 8d bd d0 00 00 00 lea 0xd0(%r13),%rdi | |
ffffffff829da004: 48 89 f9 mov %rdi,%rcx | |
ffffffff829da007: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829da00b: 80 3c 11 00 cmpb $0x0,(%rcx,%rdx,1) | |
ffffffff829da00f: 0f 85 b1 17 00 00 jne ffffffff829db7c6 <tty_ioctl+0x1df6> | |
ffffffff829da015: 49 83 bd d0 00 00 00 cmpq $0x0,0xd0(%r13) | |
ffffffff829da01c: 00 | |
ffffffff829da01d: 0f 84 2a 13 00 00 je ffffffff829db34d <tty_ioctl+0x197d> | |
return -EINVAL; | |
retval = get_user(val, p); | |
ffffffff829da023: be b5 0a 00 00 mov $0xab5,%esi | |
ffffffff829da028: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da02f: e8 8c 05 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da034: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829da03b: e8 50 a9 d1 ff callq ffffffff826f4990 <__get_user_4> | |
if (retval) | |
ffffffff829da040: 85 c0 test %eax,%eax | |
ffffffff829da042: 0f 85 66 ff ff ff jne ffffffff829d9fae <tty_ioctl+0x5de> | |
return retval; | |
set = clear = 0; | |
switch (cmd) { | |
ffffffff829da048: 41 81 fe 17 54 00 00 cmp $0x5417,%r14d | |
ffffffff829da04f: 0f 84 5e 11 00 00 je ffffffff829db1b3 <tty_ioctl+0x17e3> | |
ffffffff829da055: 89 d6 mov %edx,%esi | |
ffffffff829da057: 81 e6 06 e0 00 00 and $0xe006,%esi | |
ffffffff829da05d: 41 81 fe 18 54 00 00 cmp $0x5418,%r14d | |
ffffffff829da064: 0f 85 1a 11 00 00 jne ffffffff829db184 <tty_ioctl+0x17b4> | |
case TIOCMBIC: | |
clear = val; | |
break; | |
case TIOCMSET: | |
set = val; | |
clear = ~val; | |
ffffffff829da06a: f7 d2 not %edx | |
ffffffff829da06c: 81 e2 06 e0 00 00 and $0xe006,%edx | |
break; | |
} | |
set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; | |
clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; | |
return tty->ops->tiocmset(tty, set, clear); | |
ffffffff829da072: 4c 89 f9 mov %r15,%rcx | |
ffffffff829da075: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da07c: fc ff df | |
ffffffff829da07f: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829da083: 80 3c 01 00 cmpb $0x0,(%rcx,%rax,1) | |
ffffffff829da087: 0f 85 f2 14 00 00 jne ffffffff829db57f <tty_ioctl+0x1baf> | |
ffffffff829da08d: 4c 8b 6b 18 mov 0x18(%rbx),%r13 | |
ffffffff829da091: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da098: fc ff df | |
ffffffff829da09b: 49 8d bd d0 00 00 00 lea 0xd0(%r13),%rdi | |
ffffffff829da0a2: 48 89 f9 mov %rdi,%rcx | |
ffffffff829da0a5: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829da0a9: 80 3c 01 00 cmpb $0x0,(%rcx,%rax,1) | |
ffffffff829da0ad: 0f 85 98 15 00 00 jne ffffffff829db64b <tty_ioctl+0x1c7b> | |
ffffffff829da0b3: 48 89 df mov %rbx,%rdi | |
ffffffff829da0b6: 41 ff 95 d0 00 00 00 callq *0xd0(%r13) | |
ffffffff829da0bd: e9 ec fe ff ff jmpq ffffffff829d9fae <tty_ioctl+0x5de> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829da0c2: 41 81 fe 1f 54 00 00 cmp $0x541f,%r14d | |
ffffffff829da0c9: 0f 84 fe 00 00 00 je ffffffff829da1cd <tty_ioctl+0x7fd> | |
ffffffff829da0cf: 41 81 fe 21 54 00 00 cmp $0x5421,%r14d | |
ffffffff829da0d6: 0f 85 69 fe ff ff jne ffffffff829d9f45 <tty_ioctl+0x575> | |
static int fionbio(struct file *file, int __user *p) | |
{ | |
int nonblock; | |
if (get_user(nonblock, p)) | |
ffffffff829da0dc: be 6f 09 00 00 mov $0x96f,%esi | |
ffffffff829da0e1: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da0e8: e8 d3 04 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da0ed: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829da0f4: e8 97 a8 d1 ff callq ffffffff826f4990 <__get_user_4> | |
ffffffff829da0f9: 85 c0 test %eax,%eax | |
ffffffff829da0fb: 49 89 d6 mov %rdx,%r14 | |
ffffffff829da0fe: 49 c7 c7 f2 ff ff ff mov $0xfffffffffffffff2,%r15 | |
ffffffff829da105: 0f 85 b9 fb ff ff jne ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
raw_spin_lock_init(&(_lock)->rlock); \ | |
} while (0) | |
static __always_inline void spin_lock(spinlock_t *lock) | |
{ | |
raw_spin_lock(&lock->rlock); | |
ffffffff829da10b: 49 8d 5d 30 lea 0x30(%r13),%rbx | |
ffffffff829da10f: 48 89 df mov %rbx,%rdi | |
ffffffff829da112: e8 69 cb 8c 02 callq ffffffff852a6c80 <_raw_spin_lock> | |
return -EFAULT; | |
spin_lock(&file->f_lock); | |
if (nonblock) | |
file->f_flags |= O_NONBLOCK; | |
ffffffff829da117: 49 8d 7d 70 lea 0x70(%r13),%rdi | |
ffffffff829da11b: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da122: fc ff df | |
ffffffff829da125: 48 89 fa mov %rdi,%rdx | |
ffffffff829da128: 48 c1 ea 03 shr $0x3,%rdx | |
if (get_user(nonblock, p)) | |
return -EFAULT; | |
spin_lock(&file->f_lock); | |
if (nonblock) | |
ffffffff829da12c: 45 85 f6 test %r14d,%r14d | |
file->f_flags |= O_NONBLOCK; | |
ffffffff829da12f: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax | |
if (get_user(nonblock, p)) | |
return -EFAULT; | |
spin_lock(&file->f_lock); | |
if (nonblock) | |
ffffffff829da133: 0f 84 9f 0f 00 00 je ffffffff829db0d8 <tty_ioctl+0x1708> | |
file->f_flags |= O_NONBLOCK; | |
ffffffff829da139: 84 c0 test %al,%al | |
ffffffff829da13b: 74 08 je ffffffff829da145 <tty_ioctl+0x775> | |
ffffffff829da13d: 3c 03 cmp $0x3,%al | |
ffffffff829da13f: 0f 8e 3d 16 00 00 jle ffffffff829db782 <tty_ioctl+0x1db2> | |
ffffffff829da145: 41 81 4d 70 00 08 00 orl $0x800,0x70(%r13) | |
ffffffff829da14c: 00 | |
raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \ | |
} while (0) | |
static __always_inline void spin_unlock(spinlock_t *lock) | |
{ | |
raw_spin_unlock(&lock->rlock); | |
ffffffff829da14d: 48 89 df mov %rbx,%rdi | |
ffffffff829da150: 45 31 ff xor %r15d,%r15d | |
ffffffff829da153: e8 08 ce 8c 02 callq ffffffff852a6f60 <_raw_spin_unlock> | |
ffffffff829da158: e9 67 fb ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
* Locking: none (up to the driver) | |
*/ | |
static int tty_tiocmget(struct tty_struct *tty, int __user *p) | |
{ | |
int retval = -EINVAL; | |
ffffffff829da15d: 49 c7 c7 ea ff ff ff mov $0xffffffffffffffea,%r15 | |
return 0; | |
case TCSBRKP: /* support for POSIX tcsendbreak() */ | |
return send_break(tty, arg ? arg*100 : 250); | |
case TIOCMGET: | |
return tty_tiocmget(tty, p); | |
ffffffff829da164: e9 5b fb ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
case TIOCSBRK: /* Turn break on, unconditionally */ | |
if (tty->ops->break_ctl) | |
return tty->ops->break_ctl(tty, -1); | |
return 0; | |
case TIOCCBRK: /* Turn break off, unconditionally */ | |
if (tty->ops->break_ctl) | |
ffffffff829da169: 48 8d 7b 18 lea 0x18(%rbx),%rdi | |
ffffffff829da16d: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da174: fc ff df | |
ffffffff829da177: 48 89 fa mov %rdi,%rdx | |
ffffffff829da17a: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da17e: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da182: 0f 85 27 15 00 00 jne ffffffff829db6af <tty_ioctl+0x1cdf> | |
ffffffff829da188: 4c 8b 6b 18 mov 0x18(%rbx),%r13 | |
ffffffff829da18c: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da193: fc ff df | |
ffffffff829da196: 49 8d bd a0 00 00 00 lea 0xa0(%r13),%rdi | |
ffffffff829da19d: 48 89 fa mov %rdi,%rdx | |
ffffffff829da1a0: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da1a4: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da1a8: 0f 85 f7 14 00 00 jne ffffffff829db6a5 <tty_ioctl+0x1cd5> | |
ffffffff829da1ae: 49 8b 85 a0 00 00 00 mov 0xa0(%r13),%rax | |
ffffffff829da1b5: 48 85 c0 test %rax,%rax | |
ffffffff829da1b8: 0f 84 a4 00 00 00 je ffffffff829da262 <tty_ioctl+0x892> | |
return tty->ops->break_ctl(tty, 0); | |
ffffffff829da1be: 31 f6 xor %esi,%esi | |
ffffffff829da1c0: 48 89 df mov %rbx,%rdi | |
ffffffff829da1c3: ff d0 callq *%rax | |
ffffffff829da1c5: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829da1c8: e9 f7 fa ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
DEFAULT_RATELIMIT_INTERVAL, | |
DEFAULT_RATELIMIT_BURST); | |
char comm[TASK_COMM_LEN]; | |
int flags; | |
if (get_user(flags, &ss->flags)) | |
ffffffff829da1cd: be e0 0a 00 00 mov $0xae0,%esi | |
ffffffff829da1d2: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da1d9: e8 e2 03 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da1de: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829da1e5: 48 83 c0 10 add $0x10,%rax | |
ffffffff829da1e9: e8 a2 a7 d1 ff callq ffffffff826f4990 <__get_user_4> | |
ffffffff829da1ee: 85 c0 test %eax,%eax | |
ffffffff829da1f0: 0f 85 4f fd ff ff jne ffffffff829d9f45 <tty_ioctl+0x575> | |
return; | |
flags &= ASYNC_DEPRECATED; | |
if (flags && __ratelimit(&depr_flags)) | |
ffffffff829da1f6: 41 89 d7 mov %edx,%r15d | |
ffffffff829da1f9: 41 81 e7 00 87 00 00 and $0x8700,%r15d | |
ffffffff829da200: 0f 84 3f fd ff ff je ffffffff829d9f45 <tty_ioctl+0x575> | |
ffffffff829da206: 48 c7 c6 a0 2c 61 85 mov $0xffffffff85612ca0,%rsi | |
ffffffff829da20d: 48 c7 c7 00 7d 3d 86 mov $0xffffffff863d7d00,%rdi | |
ffffffff829da214: e8 67 d1 cf ff callq ffffffff826d7380 <___ratelimit> | |
ffffffff829da219: 85 c0 test %eax,%eax | |
ffffffff829da21b: 0f 84 24 fd ff ff je ffffffff829d9f45 <tty_ioctl+0x575> | |
pr_warning("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n", | |
ffffffff829da221: 48 8d bd 18 ff ff ff lea -0xe8(%rbp),%rdi | |
ffffffff829da228: 65 48 8b 34 25 c0 3f mov %gs:0x13fc0,%rsi | |
ffffffff829da22f: 01 00 | |
ffffffff829da231: e8 ca aa c6 fe callq ffffffff81644d00 <get_task_comm> | |
ffffffff829da236: 44 89 f9 mov %r15d,%ecx | |
ffffffff829da239: 48 89 c2 mov %rax,%rdx | |
ffffffff829da23c: 48 c7 c6 a0 2c 61 85 mov $0xffffffff85612ca0,%rsi | |
ffffffff829da243: 48 c7 c7 20 25 61 85 mov $0xffffffff85612520,%rdi | |
ffffffff829da24a: e8 0d eb b2 fe callq ffffffff81508d5c <printk> | |
ffffffff829da24f: e9 f1 fc ff ff jmpq ffffffff829d9f45 <tty_ioctl+0x575> | |
case TCSBRK: /* SVID version: non-zero arg --> no break */ | |
/* non-zero arg means wait for all output data | |
* to be sent (performed above) but don't send break. | |
* This is used by the tcdrain() termios function. | |
*/ | |
if (!arg) | |
ffffffff829da254: 48 83 bd 30 fe ff ff cmpq $0x0,-0x1d0(%rbp) | |
ffffffff829da25b: 00 | |
ffffffff829da25c: 0f 84 29 0f 00 00 je ffffffff829db18b <tty_ioctl+0x17bb> | |
* Break handling | |
*/ | |
case TIOCSBRK: /* Turn break on, unconditionally */ | |
if (tty->ops->break_ctl) | |
return tty->ops->break_ctl(tty, -1); | |
return 0; | |
ffffffff829da262: 45 31 ff xor %r15d,%r15d | |
ffffffff829da265: e9 5a fa ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
ffffffff829da26a: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829da271: 01 00 | |
static int tiocsti(struct tty_struct *tty, char __user *p) | |
{ | |
char ch, mbz = 0; | |
struct tty_ldisc *ld; | |
if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN)) | |
ffffffff829da273: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829da27a: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da281: fc ff df | |
* FIXME: may race normal receive processing | |
*/ | |
static int tiocsti(struct tty_struct *tty, char __user *p) | |
{ | |
char ch, mbz = 0; | |
ffffffff829da284: c6 85 98 fe ff ff 00 movb $0x0,-0x168(%rbp) | |
struct tty_ldisc *ld; | |
if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN)) | |
ffffffff829da28b: 48 89 fa mov %rdi,%rdx | |
ffffffff829da28e: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da292: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da296: 0f 85 97 16 00 00 jne ffffffff829db933 <tty_ioctl+0x1f63> | |
ffffffff829da29c: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829da2a3: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da2aa: fc ff df | |
ffffffff829da2ad: 49 8d be d0 01 00 00 lea 0x1d0(%r14),%rdi | |
ffffffff829da2b4: 48 89 fa mov %rdi,%rdx | |
ffffffff829da2b7: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da2bb: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da2bf: 0f 85 64 16 00 00 jne ffffffff829db929 <tty_ioctl+0x1f59> | |
ffffffff829da2c5: 49 3b 9e d0 01 00 00 cmp 0x1d0(%r14),%rbx | |
ffffffff829da2cc: 74 12 je ffffffff829da2e0 <tty_ioctl+0x910> | |
ffffffff829da2ce: bf 15 00 00 00 mov $0x15,%edi | |
ffffffff829da2d3: e8 78 1f 87 fe callq ffffffff8124c250 <capable> | |
ffffffff829da2d8: 84 c0 test %al,%al | |
ffffffff829da2da: 0f 84 1c 10 00 00 je ffffffff829db2fc <tty_ioctl+0x192c> | |
return -EPERM; | |
if (get_user(ch, p)) | |
ffffffff829da2e0: be e4 08 00 00 mov $0x8e4,%esi | |
ffffffff829da2e5: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da2ec: e8 cf 02 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da2f1: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829da2f8: e8 33 a6 d1 ff callq ffffffff826f4930 <__get_user_1> | |
ffffffff829da2fd: 85 c0 test %eax,%eax | |
ffffffff829da2ff: 88 95 58 fe ff ff mov %dl,-0x1a8(%rbp) | |
ffffffff829da305: 49 c7 c7 f2 ff ff ff mov $0xfffffffffffffff2,%r15 | |
ffffffff829da30c: 0f 85 b2 f9 ff ff jne ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
return -EFAULT; | |
tty_audit_tiocsti(tty, ch); | |
ffffffff829da312: 0f be f2 movsbl %dl,%esi | |
ffffffff829da315: 48 89 df mov %rbx,%rdi | |
ffffffff829da318: e8 a3 0c 02 00 callq ffffffff829fafc0 <tty_audit_tiocsti> | |
ld = tty_ldisc_ref_wait(tty); | |
ffffffff829da31d: 48 89 df mov %rbx,%rdi | |
ffffffff829da320: e8 1b 74 01 00 callq ffffffff829f1740 <tty_ldisc_ref_wait> | |
ld->ops->receive_buf(tty, &ch, &mbz, 1); | |
ffffffff829da325: 48 89 c2 mov %rax,%rdx | |
if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN)) | |
return -EPERM; | |
if (get_user(ch, p)) | |
return -EFAULT; | |
tty_audit_tiocsti(tty, ch); | |
ld = tty_ldisc_ref_wait(tty); | |
ffffffff829da328: 49 89 c5 mov %rax,%r13 | |
ld->ops->receive_buf(tty, &ch, &mbz, 1); | |
ffffffff829da32b: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da332: fc ff df | |
ffffffff829da335: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da339: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da33d: 0f 85 3e 13 00 00 jne ffffffff829db681 <tty_ioctl+0x1cb1> | |
ffffffff829da343: 4d 8b 75 00 mov 0x0(%r13),%r14 | |
ffffffff829da347: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da34e: fc ff df | |
ffffffff829da351: 49 8d 7e 70 lea 0x70(%r14),%rdi | |
ffffffff829da355: 48 89 fa mov %rdi,%rdx | |
ffffffff829da358: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da35c: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da360: 0f 85 11 13 00 00 jne ffffffff829db677 <tty_ioctl+0x1ca7> | |
ffffffff829da366: 48 8d 45 d8 lea -0x28(%rbp),%rax | |
ffffffff829da36a: 48 8d 95 98 fe ff ff lea -0x168(%rbp),%rdx | |
ffffffff829da371: b9 01 00 00 00 mov $0x1,%ecx | |
ffffffff829da376: 48 89 df mov %rbx,%rdi | |
tty_ldisc_deref(ld); | |
ffffffff829da379: 45 31 ff xor %r15d,%r15d | |
return -EPERM; | |
if (get_user(ch, p)) | |
return -EFAULT; | |
tty_audit_tiocsti(tty, ch); | |
ld = tty_ldisc_ref_wait(tty); | |
ld->ops->receive_buf(tty, &ch, &mbz, 1); | |
ffffffff829da37c: 48 8d b0 80 fe ff ff lea -0x180(%rax),%rsi | |
ffffffff829da383: 41 ff 56 70 callq *0x70(%r14) | |
tty_ldisc_deref(ld); | |
ffffffff829da387: 4c 89 ef mov %r13,%rdi | |
ffffffff829da38a: e8 d1 74 01 00 callq ffffffff829f1860 <tty_ldisc_deref> | |
ffffffff829da38f: e9 30 f9 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
static int tty_tiocmget(struct tty_struct *tty, int __user *p) | |
{ | |
int retval = -EINVAL; | |
if (tty->ops->tiocmget) { | |
ffffffff829da394: 48 8d 7b 18 lea 0x18(%rbx),%rdi | |
ffffffff829da398: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da39f: fc ff df | |
ffffffff829da3a2: 48 89 fa mov %rdi,%rdx | |
ffffffff829da3a5: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da3a9: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da3ad: 0f 85 27 13 00 00 jne ffffffff829db6da <tty_ioctl+0x1d0a> | |
ffffffff829da3b3: 4c 8b 73 18 mov 0x18(%rbx),%r14 | |
ffffffff829da3b7: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da3be: fc ff df | |
ffffffff829da3c1: 49 8d be c8 00 00 00 lea 0xc8(%r14),%rdi | |
ffffffff829da3c8: 48 89 fa mov %rdi,%rdx | |
ffffffff829da3cb: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da3cf: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da3d3: 0f 85 f7 12 00 00 jne ffffffff829db6d0 <tty_ioctl+0x1d00> | |
ffffffff829da3d9: 49 8b 86 c8 00 00 00 mov 0xc8(%r14),%rax | |
ffffffff829da3e0: 48 85 c0 test %rax,%rax | |
ffffffff829da3e3: 0f 84 74 fd ff ff je ffffffff829da15d <tty_ioctl+0x78d> | |
retval = tty->ops->tiocmget(tty); | |
ffffffff829da3e9: 48 89 df mov %rbx,%rdi | |
ffffffff829da3ec: ff d0 callq *%rax | |
ffffffff829da3ee: 4c 63 f8 movslq %eax,%r15 | |
if (retval >= 0) | |
ffffffff829da3f1: 45 85 ff test %r15d,%r15d | |
ffffffff829da3f4: 0f 88 ca f8 ff ff js ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
retval = put_user(retval, p); | |
ffffffff829da3fa: be 9b 0a 00 00 mov $0xa9b,%esi | |
ffffffff829da3ff: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da406: e8 b5 01 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da40b: 44 89 f8 mov %r15d,%eax | |
ffffffff829da40e: 48 8b 8d 30 fe ff ff mov -0x1d0(%rbp),%rcx | |
ffffffff829da415: e8 76 ec d1 ff callq ffffffff826f9090 <__put_user_4> | |
ffffffff829da41a: e9 8f fb ff ff jmpq ffffffff829d9fae <tty_ioctl+0x5de> | |
int ret; | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829da41f: 4c 39 d3 cmp %r10,%rbx | |
ffffffff829da422: 0f 84 ef 0c 00 00 je ffffffff829db117 <tty_ioctl+0x1747> | |
return -ENOTTY; | |
pid = tty_get_pgrp(real_tty); | |
ffffffff829da428: 4c 89 d7 mov %r10,%rdi | |
ffffffff829da42b: e8 70 7d ff ff callq ffffffff829d21a0 <tty_get_pgrp> | |
ret = put_user(pid_vnr(pid), p); | |
ffffffff829da430: be fa 09 00 00 mov $0x9fa,%esi | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
return -ENOTTY; | |
pid = tty_get_pgrp(real_tty); | |
ffffffff829da435: 49 89 c6 mov %rax,%r14 | |
ret = put_user(pid_vnr(pid), p); | |
ffffffff829da438: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da43f: e8 7c 01 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da444: 4c 89 f7 mov %r14,%rdi | |
ffffffff829da447: e8 54 da 8a fe callq ffffffff81287ea0 <pid_vnr> | |
ffffffff829da44c: 48 8b 8d 30 fe ff ff mov -0x1d0(%rbp),%rcx | |
ffffffff829da453: e8 38 ec d1 ff callq ffffffff826f9090 <__put_user_4> | |
put_pid(pid); | |
ffffffff829da458: 4c 89 f7 mov %r14,%rdi | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
return -ENOTTY; | |
pid = tty_get_pgrp(real_tty); | |
ret = put_user(pid_vnr(pid), p); | |
ffffffff829da45b: 4c 63 f8 movslq %eax,%r15 | |
put_pid(pid); | |
ffffffff829da45e: e8 7d de 8a fe callq ffffffff812882e0 <put_pid> | |
ffffffff829da463: e9 5c f8 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
static int tiocsetd(struct tty_struct *tty, int __user *p) | |
{ | |
int ldisc; | |
int ret; | |
if (get_user(ldisc, p)) | |
ffffffff829da468: be 57 0a 00 00 mov $0xa57,%esi | |
ffffffff829da46d: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da474: e8 47 01 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da479: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829da480: e8 0b a5 d1 ff callq ffffffff826f4990 <__get_user_4> | |
ffffffff829da485: 85 c0 test %eax,%eax | |
ffffffff829da487: 49 c7 c7 f2 ff ff ff mov $0xfffffffffffffff2,%r15 | |
ffffffff829da48e: 0f 85 30 f8 ff ff jne ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
return -EFAULT; | |
ret = tty_set_ldisc(tty, ldisc); | |
ffffffff829da494: 89 d6 mov %edx,%esi | |
ffffffff829da496: 48 89 df mov %rbx,%rdi | |
ffffffff829da499: e8 82 7b 01 00 callq ffffffff829f2020 <tty_set_ldisc> | |
ffffffff829da49e: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829da4a1: e9 1e f8 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr) | |
{ | |
return ((1UL << (nr & (BITS_PER_LONG-1))) & | |
(addr[nr >> _BITOPS_LONG_SHIFT])) != 0; | |
ffffffff829da4a6: 48 8d bb 58 04 00 00 lea 0x458(%rbx),%rdi | |
ffffffff829da4ad: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da4b4: fc ff df | |
ffffffff829da4b7: 48 89 fa mov %rdi,%rdx | |
ffffffff829da4ba: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da4be: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da4c2: 0f 85 a5 11 00 00 jne ffffffff829db66d <tty_ioctl+0x1c9d> | |
ffffffff829da4c8: 4c 8b bb 58 04 00 00 mov 0x458(%rbx),%r15 | |
clear_bit(TTY_EXCLUSIVE, &tty->flags); | |
return 0; | |
case TIOCGEXCL: | |
{ | |
int excl = test_bit(TTY_EXCLUSIVE, &tty->flags); | |
return put_user(excl, (int __user *)p); | |
ffffffff829da4cf: be 31 0b 00 00 mov $0xb31,%esi | |
ffffffff829da4d4: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da4db: e8 e0 00 bb fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da4e0: 48 8b 8d 30 fe ff ff mov -0x1d0(%rbp),%rcx | |
ffffffff829da4e7: 49 c1 ef 03 shr $0x3,%r15 | |
GEN_BINARY_RMWcc(LOCK_PREFIX "btc", *addr, "Ir", nr, "%0", "c"); | |
} | |
static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr) | |
{ | |
return ((1UL << (nr & (BITS_PER_LONG-1))) & | |
ffffffff829da4eb: 41 83 e7 01 and $0x1,%r15d | |
ffffffff829da4ef: 44 89 f8 mov %r15d,%eax | |
ffffffff829da4f2: e8 99 eb d1 ff callq ffffffff826f9090 <__put_user_4> | |
ffffffff829da4f7: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829da4fa: e9 c5 f7 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
* if pty, return the slave side (real_tty) | |
* otherwise, return self | |
*/ | |
static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty) | |
{ | |
if (tty->driver->type == TTY_DRIVER_TYPE_PTY && | |
ffffffff829da4ff: e8 6c fd c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829da504: e9 2f f6 ff ff jmpq ffffffff829d9b38 <tty_ioctl+0x168> | |
if (tty->ops->ioctl) { | |
retval = tty->ops->ioctl(tty, cmd, arg); | |
if (retval != -ENOIOCTLCMD) | |
return retval; | |
} | |
ld = tty_ldisc_ref_wait(tty); | |
ffffffff829da509: 48 89 df mov %rbx,%rdi | |
ffffffff829da50c: e8 2f 72 01 00 callq ffffffff829f1740 <tty_ldisc_ref_wait> | |
retval = -EINVAL; | |
if (ld->ops->ioctl) { | |
ffffffff829da511: 48 89 c2 mov %rax,%rdx | |
if (tty->ops->ioctl) { | |
retval = tty->ops->ioctl(tty, cmd, arg); | |
if (retval != -ENOIOCTLCMD) | |
return retval; | |
} | |
ld = tty_ldisc_ref_wait(tty); | |
ffffffff829da514: 49 89 c1 mov %rax,%r9 | |
retval = -EINVAL; | |
if (ld->ops->ioctl) { | |
ffffffff829da517: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da51e: fc ff df | |
ffffffff829da521: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da525: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da529: 0f 85 38 12 00 00 jne ffffffff829db767 <tty_ioctl+0x1d97> | |
ffffffff829da52f: 4d 8b 39 mov (%r9),%r15 | |
ffffffff829da532: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da539: fc ff df | |
ffffffff829da53c: 49 8d 7f 48 lea 0x48(%r15),%rdi | |
ffffffff829da540: 48 89 fa mov %rdi,%rdx | |
ffffffff829da543: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da547: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da54b: 0f 85 fe 11 00 00 jne ffffffff829db74f <tty_ioctl+0x1d7f> | |
ffffffff829da551: 49 8b 47 48 mov 0x48(%r15),%rax | |
ffffffff829da555: 49 c7 c7 ea ff ff ff mov $0xffffffffffffffea,%r15 | |
ffffffff829da55c: 48 85 c0 test %rax,%rax | |
ffffffff829da55f: 74 33 je ffffffff829da594 <tty_ioctl+0xbc4> | |
ffffffff829da561: 4c 89 8d 28 fe ff ff mov %r9,-0x1d8(%rbp) | |
retval = ld->ops->ioctl(tty, file, cmd, arg); | |
ffffffff829da568: 48 8b 8d 30 fe ff ff mov -0x1d0(%rbp),%rcx | |
ffffffff829da56f: 44 89 f2 mov %r14d,%edx | |
ffffffff829da572: 4c 89 ee mov %r13,%rsi | |
ffffffff829da575: 48 89 df mov %rbx,%rdi | |
ffffffff829da578: ff d0 callq *%rax | |
ffffffff829da57a: 4c 8b 8d 28 fe ff ff mov -0x1d8(%rbp),%r9 | |
ffffffff829da581: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829da584: 3d fd fd ff ff cmp $0xfffffdfd,%eax | |
ffffffff829da589: 48 c7 c0 e7 ff ff ff mov $0xffffffffffffffe7,%rax | |
ffffffff829da590: 4c 0f 44 f8 cmove %rax,%r15 | |
if (retval == -ENOIOCTLCMD) | |
retval = -ENOTTY; | |
} | |
tty_ldisc_deref(ld); | |
ffffffff829da594: 4c 89 cf mov %r9,%rdi | |
ffffffff829da597: e8 c4 72 01 00 callq ffffffff829f1860 <tty_ldisc_deref> | |
return retval; | |
ffffffff829da59c: e9 23 f7 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
/* | |
* Now do the stuff. | |
*/ | |
switch (cmd) { | |
ffffffff829da5a1: 41 81 fe 28 54 00 00 cmp $0x5428,%r14d | |
ffffffff829da5a8: 0f 84 bb fb ff ff je ffffffff829da169 <tty_ioctl+0x799> | |
ffffffff829da5ae: 41 81 fe 29 54 00 00 cmp $0x5429,%r14d | |
ffffffff829da5b5: 0f 85 8a f9 ff ff jne ffffffff829d9f45 <tty_ioctl+0x575> | |
{ | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829da5bb: 4c 39 d3 cmp %r10,%rbx | |
ffffffff829da5be: 0f 84 09 0c 00 00 je ffffffff829db1cd <tty_ioctl+0x17fd> | |
return -ENOTTY; | |
if (!real_tty->session) | |
ffffffff829da5c4: 49 8d 9a 50 04 00 00 lea 0x450(%r10),%rbx | |
ffffffff829da5cb: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da5d2: fc ff df | |
ffffffff829da5d5: 48 89 da mov %rbx,%rdx | |
ffffffff829da5d8: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da5dc: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da5e0: 0f 85 ea 0f 00 00 jne ffffffff829db5d0 <tty_ioctl+0x1c00> | |
ffffffff829da5e6: 49 83 ba 50 04 00 00 cmpq $0x0,0x450(%r10) | |
ffffffff829da5ed: 00 | |
ffffffff829da5ee: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829da5f5: 0f 84 5c 0d 00 00 je ffffffff829db357 <tty_ioctl+0x1987> | |
return -ENOTTY; | |
return put_user(pid_vnr(real_tty->session), p); | |
ffffffff829da5fb: be 45 0a 00 00 mov $0xa45,%esi | |
ffffffff829da600: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829da607: e8 b4 ff ba fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829da60c: 48 89 da mov %rbx,%rdx | |
ffffffff829da60f: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da616: fc ff df | |
ffffffff829da619: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829da620: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da624: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da628: 0f 85 76 0f 00 00 jne ffffffff829db5a4 <tty_ioctl+0x1bd4> | |
ffffffff829da62e: 49 8b ba 50 04 00 00 mov 0x450(%r10),%rdi | |
ffffffff829da635: e8 66 d8 8a fe callq ffffffff81287ea0 <pid_vnr> | |
ffffffff829da63a: 48 8b 8d 30 fe ff ff mov -0x1d0(%rbp),%rcx | |
ffffffff829da641: e8 4a ea d1 ff callq ffffffff826f9090 <__put_user_4> | |
ffffffff829da646: e9 63 f9 ff ff jmpq ffffffff829d9fae <tty_ioctl+0x5de> | |
EXPORT_SYMBOL(tty_unregister_driver); | |
dev_t tty_devnum(struct tty_struct *tty) | |
{ | |
return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index; | |
ffffffff829da64b: 49 8d 7a 10 lea 0x10(%r10),%rdi | |
ffffffff829da64f: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da656: fc ff df | |
ffffffff829da659: 48 89 fa mov %rdi,%rdx | |
ffffffff829da65c: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da660: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da664: 0f 85 81 0f 00 00 jne ffffffff829db5eb <tty_ioctl+0x1c1b> | |
ffffffff829da66a: 49 8b 5a 10 mov 0x10(%r10),%rbx | |
ffffffff829da66e: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da675: fc ff df | |
ffffffff829da678: 48 8d 7b 2c lea 0x2c(%rbx),%rdi | |
ffffffff829da67c: 48 89 fa mov %rdi,%rdx | |
ffffffff829da67f: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da683: 0f b6 14 02 movzbl (%rdx,%rax,1),%edx | |
ffffffff829da687: 48 89 f8 mov %rdi,%rax | |
ffffffff829da68a: 83 e0 07 and $0x7,%eax | |
ffffffff829da68d: 83 c0 03 add $0x3,%eax | |
ffffffff829da690: 38 d0 cmp %dl,%al | |
ffffffff829da692: 7c 08 jl ffffffff829da69c <tty_ioctl+0xccc> | |
ffffffff829da694: 84 d2 test %dl,%dl | |
ffffffff829da696: 0f 85 67 0f 00 00 jne ffffffff829db603 <tty_ioctl+0x1c33> | |
ffffffff829da69c: 48 8d 7b 30 lea 0x30(%rbx),%rdi | |
ffffffff829da6a0: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da6a7: fc ff df | |
ffffffff829da6aa: 44 8b 6b 2c mov 0x2c(%rbx),%r13d | |
ffffffff829da6ae: 48 89 f9 mov %rdi,%rcx | |
ffffffff829da6b1: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829da6b5: 41 c1 e5 14 shl $0x14,%r13d | |
ffffffff829da6b9: 0f b6 04 01 movzbl (%rcx,%rax,1),%eax | |
ffffffff829da6bd: 84 c0 test %al,%al | |
ffffffff829da6bf: 74 08 je ffffffff829da6c9 <tty_ioctl+0xcf9> | |
ffffffff829da6c1: 3c 03 cmp $0x3,%al | |
ffffffff829da6c3: 0f 8e 52 0f 00 00 jle ffffffff829db61b <tty_ioctl+0x1c4b> | |
ffffffff829da6c9: 49 8d 7a 20 lea 0x20(%r10),%rdi | |
ffffffff829da6cd: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da6d4: fc ff df | |
ffffffff829da6d7: 44 0b 6b 30 or 0x30(%rbx),%r13d | |
ffffffff829da6db: 48 89 fa mov %rdi,%rdx | |
ffffffff829da6de: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da6e2: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax | |
ffffffff829da6e6: 44 89 eb mov %r13d,%ebx | |
ffffffff829da6e9: 84 c0 test %al,%al | |
ffffffff829da6eb: 74 08 je ffffffff829da6f5 <tty_ioctl+0xd25> | |
ffffffff829da6ed: 3c 03 cmp $0x3,%al | |
ffffffff829da6ef: 0f 8e 3e 0f 00 00 jle ffffffff829db633 <tty_ioctl+0x1c63> | |
ffffffff829da6f5: 41 03 5a 20 add 0x20(%r10),%ebx | |
tty_vhangup(tty); | |
return 0; | |
case TIOCGDEV: | |
{ | |
unsigned int ret = new_encode_dev(tty_devnum(real_tty)); | |
return put_user(ret, (unsigned int __user *)p); | |
ffffffff829da6f9: be 4c 0b 00 00 mov $0xb4c,%esi | |
return 1; | |
} | |
static inline u32 new_encode_dev(dev_t dev) | |
{ | |
unsigned major = MAJOR(dev); | |
ffffffff829da6fe: 41 89 df mov %ebx,%r15d | |
ffffffff829da701: 41 c1 ef 14 shr $0x14,%r15d | |
unsigned minor = MINOR(dev); | |
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); | |
ffffffff829da705: 44 89 f8 mov %r15d,%eax | |
ffffffff829da708: 41 89 df mov %ebx,%r15d | |
ffffffff829da70b: 41 c1 e7 0c shl $0xc,%r15d | |
ffffffff829da70f: c1 e0 08 shl $0x8,%eax | |
ffffffff829da712: 41 81 e7 00 00 f0 ff and $0xfff00000,%r15d | |
ffffffff829da719: 41 09 c7 or %eax,%r15d | |
ffffffff829da71c: 0f b6 c3 movzbl %bl,%eax | |
ffffffff829da71f: 41 09 c7 or %eax,%r15d | |
ffffffff829da722: e9 d8 fc ff ff jmpq ffffffff829da3ff <tty_ioctl+0xa2f> | |
case TIOCGETD: | |
return put_user(tty->ldisc->ops->num, (int __user *)p); | |
case TIOCSETD: | |
return tiocsetd(tty, p); | |
case TIOCVHANGUP: | |
if (!capable(CAP_SYS_ADMIN)) | |
ffffffff829da727: bf 15 00 00 00 mov $0x15,%edi | |
return -EPERM; | |
ffffffff829da72c: 49 c7 c7 ff ff ff ff mov $0xffffffffffffffff,%r15 | |
case TIOCGETD: | |
return put_user(tty->ldisc->ops->num, (int __user *)p); | |
case TIOCSETD: | |
return tiocsetd(tty, p); | |
case TIOCVHANGUP: | |
if (!capable(CAP_SYS_ADMIN)) | |
ffffffff829da733: e8 18 1b 87 fe callq ffffffff8124c250 <capable> | |
ffffffff829da738: 84 c0 test %al,%al | |
ffffffff829da73a: 0f 84 84 f5 ff ff je ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
*/ | |
void tty_vhangup(struct tty_struct *tty) | |
{ | |
tty_debug_hangup(tty, "\n"); | |
__tty_hangup(tty, 0); | |
ffffffff829da740: 31 f6 xor %esi,%esi | |
ffffffff829da742: 48 89 df mov %rbx,%rdi | |
return tiocsetd(tty, p); | |
case TIOCVHANGUP: | |
if (!capable(CAP_SYS_ADMIN)) | |
return -EPERM; | |
tty_vhangup(tty); | |
return 0; | |
ffffffff829da745: 45 31 ff xor %r15d,%r15d | |
*/ | |
void tty_vhangup(struct tty_struct *tty) | |
{ | |
tty_debug_hangup(tty, "\n"); | |
__tty_hangup(tty, 0); | |
ffffffff829da748: e8 c3 ce ff ff callq ffffffff829d7610 <__tty_hangup> | |
return tiocsetd(tty, p); | |
case TIOCVHANGUP: | |
if (!capable(CAP_SYS_ADMIN)) | |
return -EPERM; | |
tty_vhangup(tty); | |
return 0; | |
ffffffff829da74d: e9 72 f5 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
case TIOCGWINSZ: | |
return tiocgwinsz(real_tty, p); | |
case TIOCSWINSZ: | |
return tiocswinsz(real_tty, p); | |
case TIOCCONS: | |
return real_tty != tty ? -EINVAL : tioccons(file); | |
ffffffff829da752: 4c 39 d3 cmp %r10,%rbx | |
ffffffff829da755: 0f 85 02 fa ff ff jne ffffffff829da15d <tty_ioctl+0x78d> | |
* Locking: uses redirect_lock to guard the redirect information | |
*/ | |
static int tioccons(struct file *file) | |
{ | |
if (!capable(CAP_SYS_ADMIN)) | |
ffffffff829da75b: bf 15 00 00 00 mov $0x15,%edi | |
ffffffff829da760: e8 eb 1a 87 fe callq ffffffff8124c250 <capable> | |
ffffffff829da765: 84 c0 test %al,%al | |
ffffffff829da767: 0f 84 8f 0b 00 00 je ffffffff829db2fc <tty_ioctl+0x192c> | |
return -EPERM; | |
if (file->f_op->write == redirected_tty_write) { | |
ffffffff829da76d: 49 8d 7d 28 lea 0x28(%r13),%rdi | |
ffffffff829da771: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da778: fc ff df | |
ffffffff829da77b: 48 89 fa mov %rdi,%rdx | |
ffffffff829da77e: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da782: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da786: 0f 85 ab 10 00 00 jne ffffffff829db837 <tty_ioctl+0x1e67> | |
ffffffff829da78c: 49 8b 5d 28 mov 0x28(%r13),%rbx | |
ffffffff829da790: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da797: fc ff df | |
ffffffff829da79a: 48 8d 7b 18 lea 0x18(%rbx),%rdi | |
ffffffff829da79e: 48 89 fa mov %rdi,%rdx | |
ffffffff829da7a1: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da7a5: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da7a9: 0f 85 7e 10 00 00 jne ffffffff829db82d <tty_ioctl+0x1e5d> | |
ffffffff829da7af: 48 81 7b 18 80 8e 9d cmpq $0xffffffff829d8e80,0x18(%rbx) | |
ffffffff829da7b6: 82 | |
raw_spin_lock_init(&(_lock)->rlock); \ | |
} while (0) | |
static __always_inline void spin_lock(spinlock_t *lock) | |
{ | |
raw_spin_lock(&lock->rlock); | |
ffffffff829da7b7: 48 c7 c7 60 7f 3d 86 mov $0xffffffff863d7f60,%rdi | |
ffffffff829da7be: 0f 84 8c 0a 00 00 je ffffffff829db250 <tty_ioctl+0x1880> | |
ffffffff829da7c4: e8 b7 c4 8c 02 callq ffffffff852a6c80 <_raw_spin_lock> | |
if (f) | |
fput(f); | |
return 0; | |
} | |
spin_lock(&redirect_lock); | |
if (redirect) { | |
ffffffff829da7c9: 48 83 3d cf 0b f7 04 cmpq $0x0,0x4f70bcf(%rip) # ffffffff8794b3a0 <redirect> | |
ffffffff829da7d0: 00 | |
ffffffff829da7d1: 0f 85 61 0a 00 00 jne ffffffff829db238 <tty_ioctl+0x1868> | |
* | |
* Atomically increments @v by 1. | |
*/ | |
static __always_inline void atomic64_inc(atomic64_t *v) | |
{ | |
asm volatile(LOCK_PREFIX "incq %0" | |
ffffffff829da7d7: f0 49 ff 45 68 lock incq 0x68(%r13) | |
raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \ | |
} while (0) | |
static __always_inline void spin_unlock(spinlock_t *lock) | |
{ | |
raw_spin_unlock(&lock->rlock); | |
ffffffff829da7dc: 48 c7 c7 60 7f 3d 86 mov $0xffffffff863d7f60,%rdi | |
spin_unlock(&redirect_lock); | |
return -EBUSY; | |
} | |
redirect = get_file(file); | |
ffffffff829da7e3: 4c 89 2d b6 0b f7 04 mov %r13,0x4f70bb6(%rip) # ffffffff8794b3a0 <redirect> | |
ffffffff829da7ea: 45 31 ff xor %r15d,%r15d | |
ffffffff829da7ed: e8 6e c7 8c 02 callq ffffffff852a6f60 <_raw_spin_unlock> | |
ffffffff829da7f2: e9 cd f4 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
} | |
/* | |
* Break handling | |
*/ | |
case TIOCSBRK: /* Turn break on, unconditionally */ | |
if (tty->ops->break_ctl) | |
ffffffff829da7f7: 48 8d 7b 18 lea 0x18(%rbx),%rdi | |
ffffffff829da7fb: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da802: fc ff df | |
ffffffff829da805: 48 89 fa mov %rdi,%rdx | |
ffffffff829da808: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da80c: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da810: 0f 85 95 10 00 00 jne ffffffff829db8ab <tty_ioctl+0x1edb> | |
ffffffff829da816: 4c 8b 6b 18 mov 0x18(%rbx),%r13 | |
ffffffff829da81a: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da821: fc ff df | |
ffffffff829da824: 49 8d bd a0 00 00 00 lea 0xa0(%r13),%rdi | |
ffffffff829da82b: 48 89 fa mov %rdi,%rdx | |
ffffffff829da82e: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da832: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da836: 0f 85 65 10 00 00 jne ffffffff829db8a1 <tty_ioctl+0x1ed1> | |
ffffffff829da83c: 49 8b 85 a0 00 00 00 mov 0xa0(%r13),%rax | |
ffffffff829da843: 48 85 c0 test %rax,%rax | |
ffffffff829da846: 0f 84 16 fa ff ff je ffffffff829da262 <tty_ioctl+0x892> | |
return tty->ops->break_ctl(tty, -1); | |
ffffffff829da84c: be ff ff ff ff mov $0xffffffff,%esi | |
ffffffff829da851: 48 89 df mov %rbx,%rdi | |
ffffffff829da854: ff d0 callq *%rax | |
ffffffff829da856: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829da859: e9 66 f4 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
ffffffff829da85e: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829da865: 01 00 | |
{ | |
unsigned long flags; | |
struct pid *pgrp, *tty_pgrp; | |
int ret = 0; | |
if (current->signal->tty != tty) | |
ffffffff829da867: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829da86e: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da875: fc ff df | |
ffffffff829da878: 48 89 fa mov %rdi,%rdx | |
ffffffff829da87b: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da87f: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da883: 0f 85 00 10 00 00 jne ffffffff829db889 <tty_ioctl+0x1eb9> | |
ffffffff829da889: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829da890: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da897: fc ff df | |
ffffffff829da89a: 49 8d be d0 01 00 00 lea 0x1d0(%r14),%rdi | |
ffffffff829da8a1: 48 89 fa mov %rdi,%rdx | |
ffffffff829da8a4: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da8a8: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da8ac: 0f 85 bf 0f 00 00 jne ffffffff829db871 <tty_ioctl+0x1ea1> | |
ffffffff829da8b2: 4d 3b 96 d0 01 00 00 cmp 0x1d0(%r14),%r10 | |
ffffffff829da8b9: 0f 84 cd 09 00 00 je ffffffff829db28c <tty_ioctl+0x18bc> | |
ffffffff829da8bf: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829da8c6: 01 00 | |
if (retval == -EIO) | |
return -ENOTTY; | |
if (retval) | |
return retval; | |
if (!current->signal->tty || | |
ffffffff829da8c8: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829da8cf: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da8d6: fc ff df | |
ffffffff829da8d9: 48 89 fa mov %rdi,%rdx | |
ffffffff829da8dc: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da8e0: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da8e4: 0f 85 27 10 00 00 jne ffffffff829db911 <tty_ioctl+0x1f41> | |
ffffffff829da8ea: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829da8f1: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da8f8: fc ff df | |
ffffffff829da8fb: 49 8d be d0 01 00 00 lea 0x1d0(%r14),%rdi | |
ffffffff829da902: 48 89 fa mov %rdi,%rdx | |
ffffffff829da905: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da909: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da90d: 0f 85 e6 0f 00 00 jne ffffffff829db8f9 <tty_ioctl+0x1f29> | |
ffffffff829da913: 49 83 be d0 01 00 00 cmpq $0x0,0x1d0(%r14) | |
ffffffff829da91a: 00 | |
ffffffff829da91b: 0f 84 dc 07 00 00 je ffffffff829db0fd <tty_ioctl+0x172d> | |
ffffffff829da921: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829da928: 01 00 | |
(current->signal->tty != real_tty) || | |
ffffffff829da92a: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829da931: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da938: fc ff df | |
ffffffff829da93b: 48 89 fa mov %rdi,%rdx | |
ffffffff829da93e: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da942: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da946: 0f 85 eb 0b 00 00 jne ffffffff829db537 <tty_ioctl+0x1b67> | |
ffffffff829da94c: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829da953: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da95a: fc ff df | |
ffffffff829da95d: 49 8d be d0 01 00 00 lea 0x1d0(%r14),%rdi | |
ffffffff829da964: 48 89 fa mov %rdi,%rdx | |
ffffffff829da967: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da96b: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da96f: 0f 85 f2 0b 00 00 jne ffffffff829db567 <tty_ioctl+0x1b97> | |
if (retval == -EIO) | |
return -ENOTTY; | |
if (retval) | |
return retval; | |
if (!current->signal->tty || | |
ffffffff829da975: 4d 3b 96 d0 01 00 00 cmp 0x1d0(%r14),%r10 | |
ffffffff829da97c: 0f 85 7b 07 00 00 jne ffffffff829db0fd <tty_ioctl+0x172d> | |
(current->signal->tty != real_tty) || | |
(real_tty->session != task_session(current))) | |
ffffffff829da982: 49 8d ba 50 04 00 00 lea 0x450(%r10),%rdi | |
ffffffff829da989: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da990: fc ff df | |
ffffffff829da993: 48 89 fa mov %rdi,%rdx | |
ffffffff829da996: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da99a: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da99e: 0f 85 ab 0b 00 00 jne ffffffff829db54f <tty_ioctl+0x1b7f> | |
ffffffff829da9a4: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829da9ab: 01 00 | |
return task->group_leader->pids[PIDTYPE_PGID].pid; | |
} | |
static inline struct pid *task_session(struct task_struct *task) | |
{ | |
return task->group_leader->pids[PIDTYPE_SID].pid; | |
ffffffff829da9ad: 49 8d be 60 04 00 00 lea 0x460(%r14),%rdi | |
ffffffff829da9b4: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da9bb: fc ff df | |
ffffffff829da9be: 4d 8b ba 50 04 00 00 mov 0x450(%r10),%r15 | |
ffffffff829da9c5: 48 89 fa mov %rdi,%rdx | |
ffffffff829da9c8: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da9cc: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da9d0: 0f 85 54 0a 00 00 jne ffffffff829db42a <tty_ioctl+0x1a5a> | |
ffffffff829da9d6: 4d 8b b6 60 04 00 00 mov 0x460(%r14),%r14 | |
ffffffff829da9dd: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829da9e4: fc ff df | |
ffffffff829da9e7: 49 8d be c8 04 00 00 lea 0x4c8(%r14),%rdi | |
ffffffff829da9ee: 48 89 fa mov %rdi,%rdx | |
ffffffff829da9f1: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829da9f5: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829da9f9: 0f 85 13 0a 00 00 jne ffffffff829db412 <tty_ioctl+0x1a42> | |
if (retval == -EIO) | |
return -ENOTTY; | |
if (retval) | |
return retval; | |
if (!current->signal->tty || | |
(current->signal->tty != real_tty) || | |
ffffffff829da9ff: 4d 3b be c8 04 00 00 cmp 0x4c8(%r14),%r15 | |
ffffffff829daa06: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829daa0d: 0f 85 ea 06 00 00 jne ffffffff829db0fd <tty_ioctl+0x172d> | |
(real_tty->session != task_session(current))) | |
return -ENOTTY; | |
if (get_user(pgrp_nr, p)) | |
ffffffff829daa13: be 19 0a 00 00 mov $0xa19,%esi | |
ffffffff829daa18: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829daa1f: e8 9c fb ba fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829daa24: 48 8b 85 30 fe ff ff mov -0x1d0(%rbp),%rax | |
ffffffff829daa2b: e8 60 9f d1 ff callq ffffffff826f4990 <__get_user_4> | |
ffffffff829daa30: 85 c0 test %eax,%eax | |
ffffffff829daa32: 49 89 d6 mov %rdx,%r14 | |
ffffffff829daa35: 49 c7 c7 f2 ff ff ff mov $0xfffffffffffffff2,%r15 | |
ffffffff829daa3c: 0f 85 82 f2 ff ff jne ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
return -EFAULT; | |
if (pgrp_nr < 0) | |
ffffffff829daa42: 85 d2 test %edx,%edx | |
ffffffff829daa44: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829daa4b: 0f 88 0c f7 ff ff js ffffffff829da15d <tty_ioctl+0x78d> | |
#ifdef CONFIG_DEBUG_LOCK_ALLOC | |
static inline void rcu_lock_acquire(struct lockdep_map *map) | |
{ | |
lock_acquire(map, 0, 0, 2, 0, NULL, _THIS_IP_); | |
ffffffff829daa51: 45 31 c9 xor %r9d,%r9d | |
ffffffff829daa54: 45 31 c0 xor %r8d,%r8d | |
ffffffff829daa57: 31 d2 xor %edx,%edx | |
ffffffff829daa59: 31 f6 xor %esi,%esi | |
ffffffff829daa5b: b9 02 00 00 00 mov $0x2,%ecx | |
ffffffff829daa60: 48 c7 c7 80 23 11 86 mov $0xffffffff86112380,%rdi | |
ffffffff829daa67: 48 c7 04 24 51 aa 9d movq $0xffffffff829daa51,(%rsp) | |
ffffffff829daa6e: 82 | |
ffffffff829daa6f: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829daa76: e8 95 b2 95 fe callq ffffffff81335d10 <lock_acquire> | |
static inline void rcu_read_lock(void) | |
{ | |
__rcu_read_lock(); | |
__acquire(RCU); | |
rcu_lock_acquire(&rcu_lock_map); | |
RCU_LOCKDEP_WARN(!rcu_is_watching(), | |
ffffffff829daa7b: e8 90 c4 99 fe callq ffffffff81376f10 <debug_lockdep_rcu_enabled> | |
ffffffff829daa80: 85 c0 test %eax,%eax | |
ffffffff829daa82: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829daa89: 74 0d je ffffffff829daa98 <tty_ioctl+0x10c8> | |
ffffffff829daa8b: 80 3d 02 11 f9 03 00 cmpb $0x0,0x3f91102(%rip) # ffffffff8696bb94 <__warned.9527> | |
ffffffff829daa92: 0f 84 25 08 00 00 je ffffffff829db2bd <tty_ioctl+0x18ed> | |
return -EINVAL; | |
rcu_read_lock(); | |
pgrp = find_vpid(pgrp_nr); | |
ffffffff829daa98: 44 89 f7 mov %r14d,%edi | |
ffffffff829daa9b: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
retval = -ESRCH; | |
if (!pgrp) | |
ffffffff829daaa2: 49 c7 c7 fd ff ff ff mov $0xfffffffffffffffd,%r15 | |
if (get_user(pgrp_nr, p)) | |
return -EFAULT; | |
if (pgrp_nr < 0) | |
return -EINVAL; | |
rcu_read_lock(); | |
pgrp = find_vpid(pgrp_nr); | |
ffffffff829daaa9: e8 d2 da 8a fe callq ffffffff81288580 <find_vpid> | |
retval = -ESRCH; | |
if (!pgrp) | |
ffffffff829daaae: 48 85 c0 test %rax,%rax | |
if (get_user(pgrp_nr, p)) | |
return -EFAULT; | |
if (pgrp_nr < 0) | |
return -EINVAL; | |
rcu_read_lock(); | |
pgrp = find_vpid(pgrp_nr); | |
ffffffff829daab1: 49 89 c5 mov %rax,%r13 | |
retval = -ESRCH; | |
if (!pgrp) | |
ffffffff829daab4: 0f 84 d7 00 00 00 je ffffffff829dab91 <tty_ioctl+0x11c1> | |
static struct pid *session_of_pgrp(struct pid *pgrp) | |
{ | |
struct task_struct *p; | |
struct pid *sid = NULL; | |
p = pid_task(pgrp, PIDTYPE_PGID); | |
ffffffff829daaba: be 01 00 00 00 mov $0x1,%esi | |
ffffffff829daabf: 48 89 c7 mov %rax,%rdi | |
ffffffff829daac2: e8 99 db 8a fe callq ffffffff81288660 <pid_task> | |
if (p == NULL) | |
ffffffff829daac7: 48 85 c0 test %rax,%rax | |
ffffffff829daaca: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829daad1: 0f 84 1a 09 00 00 je ffffffff829db3f1 <tty_ioctl+0x1a21> | |
ffffffff829daad7: 48 8d b8 60 04 00 00 lea 0x460(%rax),%rdi | |
ffffffff829daade: 48 ba 00 00 00 00 00 movabs $0xdffffc0000000000,%rdx | |
ffffffff829daae5: fc ff df | |
ffffffff829daae8: 48 89 f9 mov %rdi,%rcx | |
ffffffff829daaeb: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829daaef: 80 3c 11 00 cmpb $0x0,(%rcx,%rdx,1) | |
ffffffff829daaf3: 0f 85 6f 09 00 00 jne ffffffff829db468 <tty_ioctl+0x1a98> | |
ffffffff829daaf9: 4c 8b b0 60 04 00 00 mov 0x460(%rax),%r14 | |
ffffffff829dab00: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dab07: fc ff df | |
ffffffff829dab0a: 49 8d be c8 04 00 00 lea 0x4c8(%r14),%rdi | |
ffffffff829dab11: 48 89 fa mov %rdi,%rdx | |
ffffffff829dab14: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dab18: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dab1c: 0f 85 92 09 00 00 jne ffffffff829db4b4 <tty_ioctl+0x1ae4> | |
ffffffff829dab22: 49 8b 86 c8 04 00 00 mov 0x4c8(%r14),%rax | |
ffffffff829dab29: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829dab30: 01 00 | |
ffffffff829dab32: 49 8d be 60 04 00 00 lea 0x460(%r14),%rdi | |
ffffffff829dab39: 48 ba 00 00 00 00 00 movabs $0xdffffc0000000000,%rdx | |
ffffffff829dab40: fc ff df | |
ffffffff829dab43: 48 89 f9 mov %rdi,%rcx | |
ffffffff829dab46: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829dab4a: 80 3c 11 00 cmpb $0x0,(%rcx,%rdx,1) | |
ffffffff829dab4e: 0f 85 3a 09 00 00 jne ffffffff829db48e <tty_ioctl+0x1abe> | |
ffffffff829dab54: 4d 8b b6 60 04 00 00 mov 0x460(%r14),%r14 | |
ffffffff829dab5b: 48 ba 00 00 00 00 00 movabs $0xdffffc0000000000,%rdx | |
ffffffff829dab62: fc ff df | |
ffffffff829dab65: 49 8d be c8 04 00 00 lea 0x4c8(%r14),%rdi | |
ffffffff829dab6c: 48 89 f9 mov %rdi,%rcx | |
ffffffff829dab6f: 48 c1 e9 03 shr $0x3,%rcx | |
ffffffff829dab73: 80 3c 11 00 cmpb $0x0,(%rcx,%rdx,1) | |
ffffffff829dab77: 0f 85 c5 08 00 00 jne ffffffff829db442 <tty_ioctl+0x1a72> | |
pgrp = find_vpid(pgrp_nr); | |
retval = -ESRCH; | |
if (!pgrp) | |
goto out_unlock; | |
retval = -EPERM; | |
if (session_of_pgrp(pgrp) != task_session(current)) | |
ffffffff829dab7d: 49 39 86 c8 04 00 00 cmp %rax,0x4c8(%r14) | |
ffffffff829dab84: 49 c7 c7 ff ff ff ff mov $0xffffffffffffffff,%r15 | |
ffffffff829dab8b: 0f 84 d0 07 00 00 je ffffffff829db361 <tty_ioctl+0x1991> | |
* | |
* See rcu_read_lock() for more information. | |
*/ | |
static inline void rcu_read_unlock(void) | |
{ | |
RCU_LOCKDEP_WARN(!rcu_is_watching(), | |
ffffffff829dab91: e8 7a c3 99 fe callq ffffffff81376f10 <debug_lockdep_rcu_enabled> | |
ffffffff829dab96: 85 c0 test %eax,%eax | |
ffffffff829dab98: 74 0d je ffffffff829daba7 <tty_ioctl+0x11d7> | |
ffffffff829dab9a: 80 3d f2 0f f9 03 00 cmpb $0x0,0x3f90ff2(%rip) # ffffffff8696bb93 <__warned.9531> | |
ffffffff829daba1: 0f 84 75 07 00 00 je ffffffff829db31c <tty_ioctl+0x194c> | |
lock_acquire(map, 0, 0, 2, 0, NULL, _THIS_IP_); | |
} | |
static inline void rcu_lock_release(struct lockdep_map *map) | |
{ | |
lock_release(map, 1, _THIS_IP_); | |
ffffffff829daba7: 48 c7 c2 a7 ab 9d 82 mov $0xffffffff829daba7,%rdx | |
ffffffff829dabae: be 01 00 00 00 mov $0x1,%esi | |
ffffffff829dabb3: 48 c7 c7 80 23 11 86 mov $0xffffffff86112380,%rdi | |
ffffffff829dabba: e8 91 b5 95 fe callq ffffffff81336150 <lock_release> | |
ffffffff829dabbf: e9 00 f1 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
static int tiocsctty(struct tty_struct *tty, struct file *file, int arg) | |
{ | |
int ret = 0; | |
tty_lock(tty); | |
ffffffff829dabc4: 48 89 df mov %rbx,%rdi | |
ffffffff829dabc7: e8 74 ca 8c 02 callq ffffffff852a7640 <tty_lock> | |
read_lock(&tasklist_lock); | |
ffffffff829dabcc: 48 c7 c7 80 50 04 86 mov $0xffffffff86045080,%rdi | |
ffffffff829dabd3: e8 98 c4 8c 02 callq ffffffff852a7070 <_raw_read_lock> | |
ffffffff829dabd8: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829dabdf: 01 00 | |
if (current->signal->leader && (task_session(current) == tty->session)) | |
ffffffff829dabe1: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829dabe8: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dabef: fc ff df | |
ffffffff829dabf2: 48 89 fa mov %rdi,%rdx | |
ffffffff829dabf5: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dabf9: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dabfd: 0f 85 ee 0b 00 00 jne ffffffff829db7f1 <tty_ioctl+0x1e21> | |
ffffffff829dac03: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829dac0a: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dac11: fc ff df | |
ffffffff829dac14: 49 8d be c8 01 00 00 lea 0x1c8(%r14),%rdi | |
ffffffff829dac1b: 48 89 fa mov %rdi,%rdx | |
ffffffff829dac1e: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dac22: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax | |
ffffffff829dac26: 84 c0 test %al,%al | |
ffffffff829dac28: 74 08 je ffffffff829dac32 <tty_ioctl+0x1262> | |
ffffffff829dac2a: 3c 03 cmp $0x3,%al | |
ffffffff829dac2c: 0f 8e c9 0b 00 00 jle ffffffff829db7fb <tty_ioctl+0x1e2b> | |
ffffffff829dac32: 41 8b 96 c8 01 00 00 mov 0x1c8(%r14),%edx | |
ffffffff829dac39: 85 d2 test %edx,%edx | |
ffffffff829dac3b: 0f 84 8a 00 00 00 je ffffffff829daccb <tty_ioctl+0x12fb> | |
ffffffff829dac41: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829dac48: 01 00 | |
ffffffff829dac4a: 49 8d be 60 04 00 00 lea 0x460(%r14),%rdi | |
ffffffff829dac51: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dac58: fc ff df | |
ffffffff829dac5b: 48 89 fa mov %rdi,%rdx | |
ffffffff829dac5e: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dac62: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dac66: 0f 85 b4 08 00 00 jne ffffffff829db520 <tty_ioctl+0x1b50> | |
ffffffff829dac6c: 4d 8b b6 60 04 00 00 mov 0x460(%r14),%r14 | |
ffffffff829dac73: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dac7a: fc ff df | |
ffffffff829dac7d: 49 8d be c8 04 00 00 lea 0x4c8(%r14),%rdi | |
ffffffff829dac84: 48 89 fa mov %rdi,%rdx | |
ffffffff829dac87: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dac8b: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dac8f: 0f 85 81 08 00 00 jne ffffffff829db516 <tty_ioctl+0x1b46> | |
ffffffff829dac95: 48 8d bb 50 04 00 00 lea 0x450(%rbx),%rdi | |
ffffffff829dac9c: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829daca3: fc ff df | |
ffffffff829daca6: 4d 8b b6 c8 04 00 00 mov 0x4c8(%r14),%r14 | |
ffffffff829dacad: 48 89 fa mov %rdi,%rdx | |
ffffffff829dacb0: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dacb4: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dacb8: 0f 85 4e 08 00 00 jne ffffffff829db50c <tty_ioctl+0x1b3c> | |
ffffffff829dacbe: 4c 3b b3 50 04 00 00 cmp 0x450(%rbx),%r14 | |
ffffffff829dacc5: 0f 84 3d 06 00 00 je ffffffff829db308 <tty_ioctl+0x1938> | |
ffffffff829daccb: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829dacd2: 01 00 | |
/* | |
* The process must be a session leader and | |
* not have a controlling tty already. | |
*/ | |
if (!current->signal->leader || current->signal->tty) { | |
ffffffff829dacd4: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829dacdb: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dace2: fc ff df | |
ffffffff829dace5: 48 89 fa mov %rdi,%rdx | |
ffffffff829dace8: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dacec: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dacf0: 0f 85 e7 0a 00 00 jne ffffffff829db7dd <tty_ioctl+0x1e0d> | |
ffffffff829dacf6: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829dacfd: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dad04: fc ff df | |
ffffffff829dad07: 49 8d be c8 01 00 00 lea 0x1c8(%r14),%rdi | |
ffffffff829dad0e: 48 89 fa mov %rdi,%rdx | |
ffffffff829dad11: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dad15: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax | |
ffffffff829dad19: 84 c0 test %al,%al | |
ffffffff829dad1b: 74 08 je ffffffff829dad25 <tty_ioctl+0x1355> | |
ffffffff829dad1d: 3c 03 cmp $0x3,%al | |
ffffffff829dad1f: 0f 8e c2 0a 00 00 jle ffffffff829db7e7 <tty_ioctl+0x1e17> | |
ffffffff829dad25: 41 8b 86 c8 01 00 00 mov 0x1c8(%r14),%eax | |
ffffffff829dad2c: 85 c0 test %eax,%eax | |
ffffffff829dad2e: 0f 84 bd 03 00 00 je ffffffff829db0f1 <tty_ioctl+0x1721> | |
ffffffff829dad34: 65 4c 8b 34 25 c0 3f mov %gs:0x13fc0,%r14 | |
ffffffff829dad3b: 01 00 | |
ffffffff829dad3d: 49 8d be 48 06 00 00 lea 0x648(%r14),%rdi | |
ffffffff829dad44: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dad4b: fc ff df | |
ffffffff829dad4e: 48 89 fa mov %rdi,%rdx | |
ffffffff829dad51: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dad55: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dad59: 0f 85 e8 0b 00 00 jne ffffffff829db947 <tty_ioctl+0x1f77> | |
ffffffff829dad5f: 4d 8b b6 48 06 00 00 mov 0x648(%r14),%r14 | |
ffffffff829dad66: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dad6d: fc ff df | |
ffffffff829dad70: 49 8d be d0 01 00 00 lea 0x1d0(%r14),%rdi | |
ffffffff829dad77: 48 89 fa mov %rdi,%rdx | |
ffffffff829dad7a: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dad7e: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dad82: 0f 85 b5 0b 00 00 jne ffffffff829db93d <tty_ioctl+0x1f6d> | |
ffffffff829dad88: 49 83 be d0 01 00 00 cmpq $0x0,0x1d0(%r14) | |
ffffffff829dad8f: 00 | |
ffffffff829dad90: 0f 85 5b 03 00 00 jne ffffffff829db0f1 <tty_ioctl+0x1721> | |
ret = -EPERM; | |
goto unlock; | |
} | |
if (tty->session) { | |
ffffffff829dad96: 4c 8d b3 50 04 00 00 lea 0x450(%rbx),%r14 | |
ffffffff829dad9d: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dada4: fc ff df | |
ffffffff829dada7: 4c 89 f2 mov %r14,%rdx | |
ffffffff829dadaa: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dadae: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dadb2: 0f 85 01 09 00 00 jne ffffffff829db6b9 <tty_ioctl+0x1ce9> | |
ffffffff829dadb8: 48 83 bb 50 04 00 00 cmpq $0x0,0x450(%rbx) | |
ffffffff829dadbf: 00 | |
ffffffff829dadc0: 74 46 je ffffffff829dae08 <tty_ioctl+0x1438> | |
/* | |
* This tty is already the controlling | |
* tty for another session group! | |
*/ | |
if (arg == 1 && capable(CAP_SYS_ADMIN)) { | |
ffffffff829dadc2: 83 bd 30 fe ff ff 01 cmpl $0x1,-0x1d0(%rbp) | |
ffffffff829dadc9: 0f 85 22 03 00 00 jne ffffffff829db0f1 <tty_ioctl+0x1721> | |
ffffffff829dadcf: bf 15 00 00 00 mov $0x15,%edi | |
ffffffff829dadd4: e8 77 14 87 fe callq ffffffff8124c250 <capable> | |
ffffffff829dadd9: 84 c0 test %al,%al | |
ffffffff829daddb: 0f 84 10 03 00 00 je ffffffff829db0f1 <tty_ioctl+0x1721> | |
/* | |
* Steal it away | |
*/ | |
session_clear_tty(tty->session); | |
ffffffff829dade1: 4c 89 f2 mov %r14,%rdx | |
ffffffff829dade4: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dadeb: fc ff df | |
ffffffff829dadee: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dadf2: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dadf6: 0f 85 2e 07 00 00 jne ffffffff829db52a <tty_ioctl+0x1b5a> | |
ffffffff829dadfc: 48 8b bb 50 04 00 00 mov 0x450(%rbx),%rdi | |
ffffffff829dae03: e8 08 e3 ff ff callq ffffffff829d9110 <session_clear_tty> | |
goto unlock; | |
} | |
} | |
/* See the comment in tty_open(). */ | |
if ((file->f_mode & FMODE_READ) == 0 && !capable(CAP_SYS_ADMIN)) { | |
ffffffff829dae08: 49 8d 7d 74 lea 0x74(%r13),%rdi | |
ffffffff829dae0c: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dae13: fc ff df | |
ffffffff829dae16: 48 89 fa mov %rdi,%rdx | |
ffffffff829dae19: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dae1d: 0f b6 14 02 movzbl (%rdx,%rax,1),%edx | |
ffffffff829dae21: 48 89 f8 mov %rdi,%rax | |
ffffffff829dae24: 83 e0 07 and $0x7,%eax | |
ffffffff829dae27: 83 c0 03 add $0x3,%eax | |
ffffffff829dae2a: 38 d0 cmp %dl,%al | |
ffffffff829dae2c: 7c 08 jl ffffffff829dae36 <tty_ioctl+0x1466> | |
ffffffff829dae2e: 84 d2 test %dl,%dl | |
ffffffff829dae30: 0f 85 90 08 00 00 jne ffffffff829db6c6 <tty_ioctl+0x1cf6> | |
ffffffff829dae36: 41 f6 45 74 01 testb $0x1,0x74(%r13) | |
ffffffff829dae3b: 75 12 jne ffffffff829dae4f <tty_ioctl+0x147f> | |
ffffffff829dae3d: bf 15 00 00 00 mov $0x15,%edi | |
ffffffff829dae42: e8 09 14 87 fe callq ffffffff8124c250 <capable> | |
ffffffff829dae47: 84 c0 test %al,%al | |
ffffffff829dae49: 0f 84 a2 02 00 00 je ffffffff829db0f1 <tty_ioctl+0x1721> | |
ffffffff829dae4f: 65 4c 8b 2c 25 c0 3f mov %gs:0x13fc0,%r13 | |
ffffffff829dae56: 01 00 | |
current->signal->tty_old_pgrp = NULL; | |
} | |
static void proc_set_tty(struct tty_struct *tty) | |
{ | |
spin_lock_irq(¤t->sighand->siglock); | |
ffffffff829dae58: 49 8d bd 50 06 00 00 lea 0x650(%r13),%rdi | |
ffffffff829dae5f: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dae66: fc ff df | |
ffffffff829dae69: 48 89 fa mov %rdi,%rdx | |
ffffffff829dae6c: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dae70: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dae74: 0f 85 75 0a 00 00 jne ffffffff829db8ef <tty_ioctl+0x1f1f> | |
raw_spin_lock_nest_lock(spinlock_check(lock), nest_lock); \ | |
} while (0) | |
static __always_inline void spin_lock_irq(spinlock_t *lock) | |
{ | |
raw_spin_lock_irq(&lock->rlock); | |
ffffffff829dae7a: 49 8b bd 50 06 00 00 mov 0x650(%r13),%rdi | |
ffffffff829dae81: 65 4c 8b 2c 25 c0 3f mov %gs:0x13fc0,%r13 | |
ffffffff829dae88: 01 00 | |
ffffffff829dae8a: 48 81 c7 08 08 00 00 add $0x808,%rdi | |
ffffffff829dae91: e8 5a bf 8c 02 callq ffffffff852a6df0 <_raw_spin_lock_irq> | |
__proc_set_tty(tty); | |
ffffffff829dae96: 48 89 df mov %rbx,%rdi | |
ffffffff829dae99: e8 52 b6 ff ff callq ffffffff829d64f0 <__proc_set_tty> | |
spin_unlock_irq(¤t->sighand->siglock); | |
ffffffff829dae9e: 49 8d bd 50 06 00 00 lea 0x650(%r13),%rdi | |
ffffffff829daea5: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829daeac: fc ff df | |
ffffffff829daeaf: 48 89 fa mov %rdi,%rdx | |
ffffffff829daeb2: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829daeb6: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829daeba: 0f 85 25 0a 00 00 jne ffffffff829db8e5 <tty_ioctl+0x1f15> | |
raw_spin_unlock_bh(&lock->rlock); | |
} | |
static __always_inline void spin_unlock_irq(spinlock_t *lock) | |
{ | |
raw_spin_unlock_irq(&lock->rlock); | |
ffffffff829daec0: 49 8b bd 50 06 00 00 mov 0x650(%r13),%rdi | |
ffffffff829daec7: 45 31 ff xor %r15d,%r15d | |
ffffffff829daeca: 48 81 c7 08 08 00 00 add $0x808,%rdi | |
ffffffff829daed1: e8 fa c0 8c 02 callq ffffffff852a6fd0 <_raw_spin_unlock_irq> | |
goto unlock; | |
} | |
proc_set_tty(tty); | |
unlock: | |
read_unlock(&tasklist_lock); | |
ffffffff829daed6: 48 c7 c7 80 50 04 86 mov $0xffffffff86045080,%rdi | |
ffffffff829daedd: e8 ee c3 8c 02 callq ffffffff852a72d0 <_raw_read_unlock> | |
tty_unlock(tty); | |
ffffffff829daee2: 48 89 df mov %rbx,%rdi | |
ffffffff829daee5: e8 06 c8 8c 02 callq ffffffff852a76f0 <tty_unlock> | |
if (current->signal->tty != tty) | |
return -ENOTTY; | |
no_tty(); | |
return 0; | |
case TIOCSCTTY: | |
return tiocsctty(tty, file, arg); | |
ffffffff829daeea: e9 d5 ed ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
*/ | |
static __always_inline void | |
set_bit(long nr, volatile unsigned long *addr) | |
{ | |
if (IS_IMMEDIATE(nr)) { | |
asm volatile(LOCK_PREFIX "orb %1,%0" | |
ffffffff829daeef: f0 80 8b 58 04 00 00 lock orb $0x8,0x458(%rbx) | |
ffffffff829daef6: 08 | |
return real_tty != tty ? -EINVAL : tioccons(file); | |
case FIONBIO: | |
return fionbio(file, p); | |
case TIOCEXCL: | |
set_bit(TTY_EXCLUSIVE, &tty->flags); | |
return 0; | |
ffffffff829daef7: 45 31 ff xor %r15d,%r15d | |
ffffffff829daefa: e9 c5 ed ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
static inline unsigned long __must_check | |
copy_from_user(void *to, const void __user *from, unsigned long n) | |
{ | |
int sz = __compiletime_object_size(to); | |
might_fault(); | |
ffffffff829daeff: be b9 02 00 00 mov $0x2b9,%esi | |
ffffffff829daf04: 48 c7 c7 c0 24 61 85 mov $0xffffffff856124c0,%rdi | |
ffffffff829daf0b: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
* Therefore limit the compile time checking to the constant size | |
* case, and do only runtime checking for non-constant sizes. | |
*/ | |
if (likely(sz < 0 || sz >= n)) | |
n = _copy_from_user(to, from, n); | |
ffffffff829daf12: 48 8d 9d d8 fe ff ff lea -0x128(%rbp),%rbx | |
static inline unsigned long __must_check | |
copy_from_user(void *to, const void __user *from, unsigned long n) | |
{ | |
int sz = __compiletime_object_size(to); | |
might_fault(); | |
ffffffff829daf19: e8 a2 f6 ba fe callq ffffffff8158a5c0 <__might_fault> | |
* Therefore limit the compile time checking to the constant size | |
* case, and do only runtime checking for non-constant sizes. | |
*/ | |
if (likely(sz < 0 || sz >= n)) | |
n = _copy_from_user(to, from, n); | |
ffffffff829daf1e: 48 8b b5 30 fe ff ff mov -0x1d0(%rbp),%rsi | |
ffffffff829daf25: ba 08 00 00 00 mov $0x8,%edx | |
ffffffff829daf2a: 48 89 df mov %rbx,%rdi | |
ffffffff829daf2d: e8 7e 92 d1 ff callq ffffffff826f41b0 <_copy_from_user> | |
*/ | |
static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg) | |
{ | |
struct winsize tmp_ws; | |
if (copy_from_user(&tmp_ws, arg, sizeof(*arg))) | |
ffffffff829daf32: 48 85 c0 test %rax,%rax | |
ffffffff829daf35: 0f 85 d5 03 00 00 jne ffffffff829db310 <tty_ioctl+0x1940> | |
return -EFAULT; | |
if (tty->ops->resize) | |
ffffffff829daf3b: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829daf42: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829daf49: fc ff df | |
ffffffff829daf4c: 49 8d 7a 18 lea 0x18(%r10),%rdi | |
ffffffff829daf50: 48 89 fa mov %rdi,%rdx | |
ffffffff829daf53: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829daf57: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829daf5b: 0f 85 93 05 00 00 jne ffffffff829db4f4 <tty_ioctl+0x1b24> | |
ffffffff829daf61: 4d 8b 6a 18 mov 0x18(%r10),%r13 | |
ffffffff829daf65: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829daf6c: fc ff df | |
ffffffff829daf6f: 49 8d bd d8 00 00 00 lea 0xd8(%r13),%rdi | |
ffffffff829daf76: 48 89 fa mov %rdi,%rdx | |
ffffffff829daf79: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829daf7d: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829daf81: 0f 85 31 06 00 00 jne ffffffff829db5b8 <tty_ioctl+0x1be8> | |
ffffffff829daf87: 49 8b 85 d8 00 00 00 mov 0xd8(%r13),%rax | |
return tty->ops->resize(tty, &tmp_ws); | |
ffffffff829daf8e: 48 89 de mov %rbx,%rsi | |
ffffffff829daf91: 4c 89 d7 mov %r10,%rdi | |
{ | |
struct winsize tmp_ws; | |
if (copy_from_user(&tmp_ws, arg, sizeof(*arg))) | |
return -EFAULT; | |
if (tty->ops->resize) | |
ffffffff829daf94: 48 85 c0 test %rax,%rax | |
ffffffff829daf97: 0f 84 23 02 00 00 je ffffffff829db1c0 <tty_ioctl+0x17f0> | |
return tty->ops->resize(tty, &tmp_ws); | |
ffffffff829daf9d: ff d0 callq *%rax | |
ffffffff829daf9f: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829dafa2: e9 1d ed ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
case TIOCSPGRP: | |
return tiocspgrp(tty, real_tty, p); | |
case TIOCGSID: | |
return tiocgsid(tty, real_tty, p); | |
case TIOCGETD: | |
return put_user(tty->ldisc->ops->num, (int __user *)p); | |
ffffffff829dafa7: 48 c7 c7 e0 1d 61 85 mov $0xffffffff85611de0,%rdi | |
ffffffff829dafae: be 41 0b 00 00 mov $0xb41,%esi | |
ffffffff829dafb3: e8 08 f6 ba fe callq ffffffff8158a5c0 <__might_fault> | |
ffffffff829dafb8: 48 8d bb b0 00 00 00 lea 0xb0(%rbx),%rdi | |
ffffffff829dafbf: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dafc6: fc ff df | |
ffffffff829dafc9: 48 89 fa mov %rdi,%rdx | |
ffffffff829dafcc: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829dafd0: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829dafd4: 0f 85 17 07 00 00 jne ffffffff829db6f1 <tty_ioctl+0x1d21> | |
ffffffff829dafda: 48 8b 9b b0 00 00 00 mov 0xb0(%rbx),%rbx | |
ffffffff829dafe1: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829dafe8: fc ff df | |
ffffffff829dafeb: 48 89 da mov %rbx,%rdx | |
ffffffff829dafee: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829daff2: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829daff6: 0f 85 e8 06 00 00 jne ffffffff829db6e4 <tty_ioctl+0x1d14> | |
ffffffff829daffc: 48 8b 1b mov (%rbx),%rbx | |
ffffffff829dafff: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db006: fc ff df | |
ffffffff829db009: 48 8d 7b 10 lea 0x10(%rbx),%rdi | |
ffffffff829db00d: 48 89 fa mov %rdi,%rdx | |
ffffffff829db010: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db014: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax | |
ffffffff829db018: 84 c0 test %al,%al | |
ffffffff829db01a: 74 08 je ffffffff829db024 <tty_ioctl+0x1654> | |
ffffffff829db01c: 3c 03 cmp $0x3,%al | |
ffffffff829db01e: 0f 8e d7 06 00 00 jle ffffffff829db6fb <tty_ioctl+0x1d2b> | |
ffffffff829db024: 8b 43 10 mov 0x10(%rbx),%eax | |
ffffffff829db027: 48 8b 8d 30 fe ff ff mov -0x1d0(%rbp),%rcx | |
ffffffff829db02e: e8 5d e0 d1 ff callq ffffffff826f9090 <__put_user_4> | |
ffffffff829db033: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829db036: e9 89 ec ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
ffffffff829db03b: 65 4c 8b 2c 25 c0 3f mov %gs:0x13fc0,%r13 | |
ffffffff829db042: 01 00 | |
{ | |
int excl = test_bit(TTY_EXCLUSIVE, &tty->flags); | |
return put_user(excl, (int __user *)p); | |
} | |
case TIOCNOTTY: | |
if (current->signal->tty != tty) | |
ffffffff829db044: 49 8d bd 48 06 00 00 lea 0x648(%r13),%rdi | |
ffffffff829db04b: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db052: fc ff df | |
ffffffff829db055: 48 89 fa mov %rdi,%rdx | |
ffffffff829db058: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db05c: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db060: 0f 85 df 06 00 00 jne ffffffff829db745 <tty_ioctl+0x1d75> | |
ffffffff829db066: 4d 8b ad 48 06 00 00 mov 0x648(%r13),%r13 | |
ffffffff829db06d: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db074: fc ff df | |
ffffffff829db077: 49 8d bd d0 01 00 00 lea 0x1d0(%r13),%rdi | |
ffffffff829db07e: 48 89 fa mov %rdi,%rdx | |
ffffffff829db081: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db085: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db089: 0f 85 ac 06 00 00 jne ffffffff829db73b <tty_ioctl+0x1d6b> | |
ffffffff829db08f: 49 39 9d d0 01 00 00 cmp %rbx,0x1d0(%r13) | |
return -ENOTTY; | |
ffffffff829db096: 49 c7 c7 e7 ff ff ff mov $0xffffffffffffffe7,%r15 | |
{ | |
int excl = test_bit(TTY_EXCLUSIVE, &tty->flags); | |
return put_user(excl, (int __user *)p); | |
} | |
case TIOCNOTTY: | |
if (current->signal->tty != tty) | |
ffffffff829db09d: 0f 85 21 ec ff ff jne ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
return -ENOTTY; | |
no_tty(); | |
ffffffff829db0a3: e8 98 e8 ff ff callq ffffffff829d9940 <no_tty> | |
return 0; | |
ffffffff829db0a8: 45 31 ff xor %r15d,%r15d | |
ffffffff829db0ab: e9 14 ec ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
ffffffff829db0b0: be 16 00 00 00 mov $0x16,%esi | |
ffffffff829db0b5: 48 89 df mov %rbx,%rdi | |
ffffffff829db0b8: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db0bf: e8 9c ad ff ff callq ffffffff829d5e60 <__tty_check_change.part.24> | |
case TIOCSBRK: | |
case TIOCCBRK: | |
case TCSBRK: | |
case TCSBRKP: | |
retval = tty_check_change(tty); | |
if (retval) | |
ffffffff829db0c4: 85 c0 test %eax,%eax | |
ffffffff829db0c6: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db0cd: 0f 85 db ee ff ff jne ffffffff829d9fae <tty_ioctl+0x5de> | |
ffffffff829db0d3: e9 f5 ea ff ff jmpq ffffffff829d9bcd <tty_ioctl+0x1fd> | |
spin_lock(&file->f_lock); | |
if (nonblock) | |
file->f_flags |= O_NONBLOCK; | |
else | |
file->f_flags &= ~O_NONBLOCK; | |
ffffffff829db0d8: 84 c0 test %al,%al | |
ffffffff829db0da: 74 08 je ffffffff829db0e4 <tty_ioctl+0x1714> | |
ffffffff829db0dc: 3c 03 cmp $0x3,%al | |
ffffffff829db0de: 0f 8e a8 06 00 00 jle ffffffff829db78c <tty_ioctl+0x1dbc> | |
ffffffff829db0e4: 41 81 65 70 ff f7 ff andl $0xfffff7ff,0x70(%r13) | |
ffffffff829db0eb: ff | |
ffffffff829db0ec: e9 5c f0 ff ff jmpq ffffffff829da14d <tty_ioctl+0x77d> | |
int ret = 0; | |
tty_lock(tty); | |
read_lock(&tasklist_lock); | |
if (current->signal->leader && (task_session(current) == tty->session)) | |
ffffffff829db0f1: 49 c7 c7 ff ff ff ff mov $0xffffffffffffffff,%r15 | |
ffffffff829db0f8: e9 d9 fd ff ff jmpq ffffffff829daed6 <tty_ioctl+0x1506> | |
ffffffff829db0fd: 49 c7 c7 e7 ff ff ff mov $0xffffffffffffffe7,%r15 | |
ffffffff829db104: e9 bb eb ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
case TIOCMBIS: | |
return tty_tiocmset(tty, cmd, p); | |
case TIOCGICOUNT: | |
retval = tty_tiocgicount(tty, p); | |
/* For the moment allow fall through to the old method */ | |
if (retval != -EINVAL) | |
ffffffff829db109: 83 f8 ea cmp $0xffffffea,%eax | |
ffffffff829db10c: 0f 85 9c ee ff ff jne ffffffff829d9fae <tty_ioctl+0x5de> | |
ffffffff829db112: e9 32 ee ff ff jmpq ffffffff829d9f49 <tty_ioctl+0x579> | |
ffffffff829db117: 65 48 8b 1c 25 c0 3f mov %gs:0x13fc0,%rbx | |
ffffffff829db11e: 01 00 | |
int ret; | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829db120: 48 8d bb 48 06 00 00 lea 0x648(%rbx),%rdi | |
ffffffff829db127: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db12e: fc ff df | |
ffffffff829db131: 48 89 fa mov %rdi,%rdx | |
ffffffff829db134: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db138: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db13c: 0f 85 6c 06 00 00 jne ffffffff829db7ae <tty_ioctl+0x1dde> | |
ffffffff829db142: 48 8b 9b 48 06 00 00 mov 0x648(%rbx),%rbx | |
ffffffff829db149: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db150: fc ff df | |
ffffffff829db153: 48 8d bb d0 01 00 00 lea 0x1d0(%rbx),%rdi | |
ffffffff829db15a: 48 89 fa mov %rdi,%rdx | |
ffffffff829db15d: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db161: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db165: 0f 85 2b 06 00 00 jne ffffffff829db796 <tty_ioctl+0x1dc6> | |
ffffffff829db16b: 4c 3b 93 d0 01 00 00 cmp 0x1d0(%rbx),%r10 | |
ffffffff829db172: 49 c7 c7 e7 ff ff ff mov $0xffffffffffffffe7,%r15 | |
ffffffff829db179: 0f 84 a9 f2 ff ff je ffffffff829da428 <tty_ioctl+0xa58> | |
ffffffff829db17f: e9 40 eb ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
retval = get_user(val, p); | |
if (retval) | |
return retval; | |
set = clear = 0; | |
switch (cmd) { | |
ffffffff829db184: 31 d2 xor %edx,%edx | |
ffffffff829db186: e9 e7 ee ff ff jmpq ffffffff829da072 <tty_ioctl+0x6a2> | |
/* non-zero arg means wait for all output data | |
* to be sent (performed above) but don't send break. | |
* This is used by the tcdrain() termios function. | |
*/ | |
if (!arg) | |
return send_break(tty, 250); | |
ffffffff829db18b: be fa 00 00 00 mov $0xfa,%esi | |
ffffffff829db190: 48 89 df mov %rbx,%rdi | |
ffffffff829db193: e8 a8 8c ff ff callq ffffffff829d3e40 <send_break> | |
ffffffff829db198: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829db19b: e9 24 eb ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
case TCFLSH: | |
switch (arg) { | |
case TCIFLUSH: | |
case TCIOFLUSH: | |
/* flush tty buffer and allow ldisc to process ioctl */ | |
tty_buffer_flush(tty, NULL); | |
ffffffff829db1a0: 31 f6 xor %esi,%esi | |
ffffffff829db1a2: 48 89 df mov %rbx,%rdi | |
ffffffff829db1a5: e8 36 9c 01 00 callq ffffffff829f4de0 <tty_buffer_flush> | |
ffffffff829db1aa: 48 8d 53 18 lea 0x18(%rbx),%rdx | |
break; | |
ffffffff829db1ae: e9 96 ed ff ff jmpq ffffffff829d9f49 <tty_ioctl+0x579> | |
ffffffff829db1b3: 81 e2 06 e0 00 00 and $0xe006,%edx | |
ffffffff829db1b9: 31 f6 xor %esi,%esi | |
ffffffff829db1bb: e9 b2 ee ff ff jmpq ffffffff829da072 <tty_ioctl+0x6a2> | |
return -EFAULT; | |
if (tty->ops->resize) | |
return tty->ops->resize(tty, &tmp_ws); | |
else | |
return tty_do_resize(tty, &tmp_ws); | |
ffffffff829db1c0: e8 9b 81 ff ff callq ffffffff829d3360 <tty_do_resize> | |
ffffffff829db1c5: 4c 63 f8 movslq %eax,%r15 | |
ffffffff829db1c8: e9 f7 ea ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
ffffffff829db1cd: 65 48 8b 1c 25 c0 3f mov %gs:0x13fc0,%rbx | |
ffffffff829db1d4: 01 00 | |
{ | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829db1d6: 48 8d bb 48 06 00 00 lea 0x648(%rbx),%rdi | |
ffffffff829db1dd: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db1e4: fc ff df | |
ffffffff829db1e7: 48 89 fa mov %rdi,%rdx | |
ffffffff829db1ea: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db1ee: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db1f2: 0f 85 61 06 00 00 jne ffffffff829db859 <tty_ioctl+0x1e89> | |
ffffffff829db1f8: 48 8b 9b 48 06 00 00 mov 0x648(%rbx),%rbx | |
ffffffff829db1ff: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db206: fc ff df | |
ffffffff829db209: 48 8d bb d0 01 00 00 lea 0x1d0(%rbx),%rdi | |
ffffffff829db210: 48 89 fa mov %rdi,%rdx | |
ffffffff829db213: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db217: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db21b: 0f 85 20 06 00 00 jne ffffffff829db841 <tty_ioctl+0x1e71> | |
ffffffff829db221: 4c 3b 93 d0 01 00 00 cmp 0x1d0(%rbx),%r10 | |
return -ENOTTY; | |
ffffffff829db228: b8 e7 ff ff ff mov $0xffffffe7,%eax | |
{ | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829db22d: 0f 84 91 f3 ff ff je ffffffff829da5c4 <tty_ioctl+0xbf4> | |
ffffffff829db233: e9 76 ed ff ff jmpq ffffffff829d9fae <tty_ioctl+0x5de> | |
raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \ | |
} while (0) | |
static __always_inline void spin_unlock(spinlock_t *lock) | |
{ | |
raw_spin_unlock(&lock->rlock); | |
ffffffff829db238: 48 c7 c7 60 7f 3d 86 mov $0xffffffff863d7f60,%rdi | |
ffffffff829db23f: 49 c7 c7 f0 ff ff ff mov $0xfffffffffffffff0,%r15 | |
ffffffff829db246: e8 15 bd 8c 02 callq ffffffff852a6f60 <_raw_spin_unlock> | |
ffffffff829db24b: e9 74 ea ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
raw_spin_lock_init(&(_lock)->rlock); \ | |
} while (0) | |
static __always_inline void spin_lock(spinlock_t *lock) | |
{ | |
raw_spin_lock(&lock->rlock); | |
ffffffff829db250: e8 2b ba 8c 02 callq ffffffff852a6c80 <_raw_spin_lock> | |
if (!capable(CAP_SYS_ADMIN)) | |
return -EPERM; | |
if (file->f_op->write == redirected_tty_write) { | |
struct file *f; | |
spin_lock(&redirect_lock); | |
f = redirect; | |
ffffffff829db255: 48 8b 1d 44 01 f7 04 mov 0x4f70144(%rip),%rbx # ffffffff8794b3a0 <redirect> | |
raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \ | |
} while (0) | |
static __always_inline void spin_unlock(spinlock_t *lock) | |
{ | |
raw_spin_unlock(&lock->rlock); | |
ffffffff829db25c: 48 c7 c7 60 7f 3d 86 mov $0xffffffff863d7f60,%rdi | |
redirect = NULL; | |
ffffffff829db263: 48 c7 05 32 01 f7 04 movq $0x0,0x4f70132(%rip) # ffffffff8794b3a0 <redirect> | |
ffffffff829db26a: 00 00 00 00 | |
spin_unlock(&redirect_lock); | |
if (f) | |
ffffffff829db26e: 45 31 ff xor %r15d,%r15d | |
ffffffff829db271: e8 ea bc 8c 02 callq ffffffff852a6f60 <_raw_spin_unlock> | |
ffffffff829db276: 48 85 db test %rbx,%rbx | |
ffffffff829db279: 0f 84 45 ea ff ff je ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
fput(f); | |
ffffffff829db27f: 48 89 df mov %rbx,%rdi | |
ffffffff829db282: e8 f9 f4 c5 fe callq ffffffff8163a780 <fput> | |
ffffffff829db287: e9 38 ea ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
ffffffff829db28c: 4c 89 d7 mov %r10,%rdi | |
ffffffff829db28f: be 16 00 00 00 mov $0x16,%esi | |
ffffffff829db294: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db29b: e8 c0 ab ff ff callq ffffffff829d5e60 <__tty_check_change.part.24> | |
{ | |
struct pid *pgrp; | |
pid_t pgrp_nr; | |
int retval = tty_check_change(real_tty); | |
if (retval == -EIO) | |
ffffffff829db2a0: 83 f8 fb cmp $0xfffffffb,%eax | |
ffffffff829db2a3: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db2aa: 0f 84 4d fe ff ff je ffffffff829db0fd <tty_ioctl+0x172d> | |
return -ENOTTY; | |
if (retval) | |
ffffffff829db2b0: 85 c0 test %eax,%eax | |
ffffffff829db2b2: 0f 85 f6 ec ff ff jne ffffffff829d9fae <tty_ioctl+0x5de> | |
ffffffff829db2b8: e9 02 f6 ff ff jmpq ffffffff829da8bf <tty_ioctl+0xeef> | |
static inline void rcu_read_lock(void) | |
{ | |
__rcu_read_lock(); | |
__acquire(RCU); | |
rcu_lock_acquire(&rcu_lock_map); | |
RCU_LOCKDEP_WARN(!rcu_is_watching(), | |
ffffffff829db2bd: e8 be e5 99 fe callq ffffffff81379880 <rcu_is_watching> | |
ffffffff829db2c2: 84 c0 test %al,%al | |
ffffffff829db2c4: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db2cb: 0f 85 c7 f7 ff ff jne ffffffff829daa98 <tty_ioctl+0x10c8> | |
ffffffff829db2d1: 48 c7 c2 c0 1e 61 85 mov $0xffffffff85611ec0,%rdx | |
ffffffff829db2d8: be 5f 03 00 00 mov $0x35f,%esi | |
ffffffff829db2dd: 48 c7 c7 20 1f 61 85 mov $0xffffffff85611f20,%rdi | |
ffffffff829db2e4: c6 05 a9 08 f9 03 01 movb $0x1,0x3f908a9(%rip) # ffffffff8696bb94 <__warned.9527> | |
ffffffff829db2eb: e8 50 ff 94 fe callq ffffffff8132b240 <lockdep_rcu_suspicious> | |
ffffffff829db2f0: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db2f7: e9 9c f7 ff ff jmpq ffffffff829daa98 <tty_ioctl+0x10c8> | |
* Locking: uses redirect_lock to guard the redirect information | |
*/ | |
static int tioccons(struct file *file) | |
{ | |
if (!capable(CAP_SYS_ADMIN)) | |
ffffffff829db2fc: 49 c7 c7 ff ff ff ff mov $0xffffffffffffffff,%r15 | |
ffffffff829db303: e9 bc e9 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
int ret = 0; | |
tty_lock(tty); | |
read_lock(&tasklist_lock); | |
if (current->signal->leader && (task_session(current) == tty->session)) | |
ffffffff829db308: 45 31 ff xor %r15d,%r15d | |
ffffffff829db30b: e9 c6 fb ff ff jmpq ffffffff829daed6 <tty_ioctl+0x1506> | |
*/ | |
static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg) | |
{ | |
struct winsize tmp_ws; | |
if (copy_from_user(&tmp_ws, arg, sizeof(*arg))) | |
ffffffff829db310: 49 c7 c7 f2 ff ff ff mov $0xfffffffffffffff2,%r15 | |
case TIOCSTI: | |
return tiocsti(tty, p); | |
case TIOCGWINSZ: | |
return tiocgwinsz(real_tty, p); | |
case TIOCSWINSZ: | |
return tiocswinsz(real_tty, p); | |
ffffffff829db317: e9 a8 e9 ff ff jmpq ffffffff829d9cc4 <tty_ioctl+0x2f4> | |
* | |
* See rcu_read_lock() for more information. | |
*/ | |
static inline void rcu_read_unlock(void) | |
{ | |
RCU_LOCKDEP_WARN(!rcu_is_watching(), | |
ffffffff829db31c: e8 5f e5 99 fe callq ffffffff81379880 <rcu_is_watching> | |
ffffffff829db321: 84 c0 test %al,%al | |
ffffffff829db323: 0f 85 7e f8 ff ff jne ffffffff829daba7 <tty_ioctl+0x11d7> | |
ffffffff829db329: 48 c7 c2 60 1f 61 85 mov $0xffffffff85611f60,%rdx | |
ffffffff829db330: be 92 03 00 00 mov $0x392,%esi | |
ffffffff829db335: 48 c7 c7 20 1f 61 85 mov $0xffffffff85611f20,%rdi | |
ffffffff829db33c: c6 05 50 08 f9 03 01 movb $0x1,0x3f90850(%rip) # ffffffff8696bb93 <__warned.9531> | |
ffffffff829db343: e8 f8 fe 94 fe callq ffffffff8132b240 <lockdep_rcu_suspicious> | |
ffffffff829db348: e9 5a f8 ff ff jmpq ffffffff829daba7 <tty_ioctl+0x11d7> | |
{ | |
int retval; | |
unsigned int set, clear, val; | |
if (tty->ops->tiocmset == NULL) | |
return -EINVAL; | |
ffffffff829db34d: b8 ea ff ff ff mov $0xffffffea,%eax | |
ffffffff829db352: e9 57 ec ff ff jmpq ffffffff829d9fae <tty_ioctl+0x5de> | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
return -ENOTTY; | |
ffffffff829db357: b8 e7 ff ff ff mov $0xffffffe7,%eax | |
ffffffff829db35c: e9 4d ec ff ff jmpq ffffffff829d9fae <tty_ioctl+0x5de> | |
raw_spin_lock_nest_lock(spinlock_check(lock), nest_lock); \ | |
} while (0) | |
static __always_inline void spin_lock_irq(spinlock_t *lock) | |
{ | |
raw_spin_lock_irq(&lock->rlock); | |
ffffffff829db361: 48 81 c3 38 03 00 00 add $0x338,%rbx | |
ffffffff829db368: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829db36f: 48 89 df mov %rbx,%rdi | |
ffffffff829db372: e8 79 ba 8c 02 callq ffffffff852a6df0 <_raw_spin_lock_irq> | |
retval = -EPERM; | |
if (session_of_pgrp(pgrp) != task_session(current)) | |
goto out_unlock; | |
retval = 0; | |
spin_lock_irq(&tty->ctrl_lock); | |
put_pid(real_tty->pgrp); | |
ffffffff829db377: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db37e: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db385: fc ff df | |
ffffffff829db388: 4d 8d b2 48 04 00 00 lea 0x448(%r10),%r14 | |
ffffffff829db38f: 4c 89 f2 mov %r14,%rdx | |
ffffffff829db392: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db396: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db39a: 0f 85 40 01 00 00 jne ffffffff829db4e0 <tty_ioctl+0x1b10> | |
ffffffff829db3a0: 49 8b ba 48 04 00 00 mov 0x448(%r10),%rdi | |
ffffffff829db3a7: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829db3ae: e8 2d cf 8a fe callq ffffffff812882e0 <put_pid> | |
* | |
* Atomically increments @v by 1. | |
*/ | |
static __always_inline void atomic_inc(atomic_t *v) | |
{ | |
asm volatile(LOCK_PREFIX "incl %0" | |
ffffffff829db3b3: f0 41 ff 45 00 lock incl 0x0(%r13) | |
real_tty->pgrp = get_pid(pgrp); | |
ffffffff829db3b8: 4c 89 f2 mov %r14,%rdx | |
ffffffff829db3bb: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax | |
ffffffff829db3c2: fc ff df | |
ffffffff829db3c5: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db3cc: 48 c1 ea 03 shr $0x3,%rdx | |
ffffffff829db3d0: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) | |
ffffffff829db3d4: 0f 85 f2 00 00 00 jne ffffffff829db4cc <tty_ioctl+0x1afc> | |
ffffffff829db3da: 4d 89 aa 48 04 00 00 mov %r13,0x448(%r10) | |
raw_spin_unlock_bh(&lock->rlock); | |
} | |
static __always_inline void spin_unlock_irq(spinlock_t *lock) | |
{ | |
raw_spin_unlock_irq(&lock->rlock); | |
ffffffff829db3e1: 48 89 df mov %rbx,%rdi | |
ffffffff829db3e4: 45 31 ff xor %r15d,%r15d | |
ffffffff829db3e7: e8 e4 bb 8c 02 callq ffffffff852a6fd0 <_raw_spin_unlock_irq> | |
ffffffff829db3ec: e9 a0 f7 ff ff jmpq ffffffff829dab91 <tty_ioctl+0x11c1> | |
struct task_struct *p; | |
struct pid *sid = NULL; | |
p = pid_task(pgrp, PIDTYPE_PGID); | |
if (p == NULL) | |
p = pid_task(pgrp, PIDTYPE_PID); | |
ffffffff829db3f1: 31 f6 xor %esi,%esi | |
ffffffff829db3f3: 4c 89 ef mov %r13,%rdi | |
ffffffff829db3f6: e8 65 d2 8a fe callq ffffffff81288660 <pid_task> | |
if (p != NULL) | |
ffffffff829db3fb: 48 85 c0 test %rax,%rax | |
ffffffff829db3fe: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db405: 0f 85 cc f6 ff ff jne ffffffff829daad7 <tty_ioctl+0x1107> | |
* The caller must hold rcu lock or the tasklist lock. | |
*/ | |
static struct pid *session_of_pgrp(struct pid *pgrp) | |
{ | |
struct task_struct *p; | |
struct pid *sid = NULL; | |
ffffffff829db40b: 31 c0 xor %eax,%eax | |
ffffffff829db40d: e9 17 f7 ff ff jmpq ffffffff829dab29 <tty_ioctl+0x1159> | |
ffffffff829db412: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db419: e8 92 ee c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db41e: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db425: e9 d5 f5 ff ff jmpq ffffffff829da9ff <tty_ioctl+0x102f> | |
ffffffff829db42a: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db431: e8 7a ee c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db436: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db43d: e9 94 f5 ff ff jmpq ffffffff829da9d6 <tty_ioctl+0x1006> | |
ffffffff829db442: 48 89 85 28 fe ff ff mov %rax,-0x1d8(%rbp) | |
ffffffff829db449: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829db450: e8 5b ee c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db455: 48 8b 85 28 fe ff ff mov -0x1d8(%rbp),%rax | |
ffffffff829db45c: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db463: e9 15 f7 ff ff jmpq ffffffff829dab7d <tty_ioctl+0x11ad> | |
ffffffff829db468: 48 89 85 28 fe ff ff mov %rax,-0x1d8(%rbp) | |
ffffffff829db46f: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829db476: e8 35 ee c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db47b: 48 8b 85 28 fe ff ff mov -0x1d8(%rbp),%rax | |
ffffffff829db482: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db489: e9 6b f6 ff ff jmpq ffffffff829daaf9 <tty_ioctl+0x1129> | |
ffffffff829db48e: 48 89 85 28 fe ff ff mov %rax,-0x1d8(%rbp) | |
ffffffff829db495: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829db49c: e8 0f ee c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db4a1: 48 8b 85 28 fe ff ff mov -0x1d8(%rbp),%rax | |
ffffffff829db4a8: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db4af: e9 a0 f6 ff ff jmpq ffffffff829dab54 <tty_ioctl+0x1184> | |
ffffffff829db4b4: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
ffffffff829db4bb: e8 f0 ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db4c0: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db4c7: e9 56 f6 ff ff jmpq ffffffff829dab22 <tty_ioctl+0x1152> | |
if (session_of_pgrp(pgrp) != task_session(current)) | |
goto out_unlock; | |
retval = 0; | |
spin_lock_irq(&tty->ctrl_lock); | |
put_pid(real_tty->pgrp); | |
real_tty->pgrp = get_pid(pgrp); | |
ffffffff829db4cc: 4c 89 f7 mov %r14,%rdi | |
ffffffff829db4cf: e8 1c ef c1 fe callq ffffffff815fa3f0 <__asan_report_store8_noabort> | |
ffffffff829db4d4: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db4db: e9 fa fe ff ff jmpq ffffffff829db3da <tty_ioctl+0x1a0a> | |
retval = -EPERM; | |
if (session_of_pgrp(pgrp) != task_session(current)) | |
goto out_unlock; | |
retval = 0; | |
spin_lock_irq(&tty->ctrl_lock); | |
put_pid(real_tty->pgrp); | |
ffffffff829db4e0: 4c 89 f7 mov %r14,%rdi | |
ffffffff829db4e3: e8 c8 ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db4e8: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db4ef: e9 ac fe ff ff jmpq ffffffff829db3a0 <tty_ioctl+0x19d0> | |
ffffffff829db4f4: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
{ | |
struct winsize tmp_ws; | |
if (copy_from_user(&tmp_ws, arg, sizeof(*arg))) | |
return -EFAULT; | |
if (tty->ops->resize) | |
ffffffff829db4fb: e8 b0 ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db500: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db507: e9 55 fa ff ff jmpq ffffffff829daf61 <tty_ioctl+0x1591> | |
int ret = 0; | |
tty_lock(tty); | |
read_lock(&tasklist_lock); | |
if (current->signal->leader && (task_session(current) == tty->session)) | |
ffffffff829db50c: e8 9f ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db511: e9 a8 f7 ff ff jmpq ffffffff829dacbe <tty_ioctl+0x12ee> | |
ffffffff829db516: e8 95 ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db51b: e9 75 f7 ff ff jmpq ffffffff829dac95 <tty_ioctl+0x12c5> | |
ffffffff829db520: e8 8b ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db525: e9 42 f7 ff ff jmpq ffffffff829dac6c <tty_ioctl+0x129c> | |
*/ | |
if (arg == 1 && capable(CAP_SYS_ADMIN)) { | |
/* | |
* Steal it away | |
*/ | |
session_clear_tty(tty->session); | |
ffffffff829db52a: 4c 89 f7 mov %r14,%rdi | |
ffffffff829db52d: e8 7e ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db532: e9 c5 f8 ff ff jmpq ffffffff829dadfc <tty_ioctl+0x142c> | |
ffffffff829db537: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
if (retval == -EIO) | |
return -ENOTTY; | |
if (retval) | |
return retval; | |
if (!current->signal->tty || | |
(current->signal->tty != real_tty) || | |
ffffffff829db53e: e8 6d ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db543: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db54a: e9 fd f3 ff ff jmpq ffffffff829da94c <tty_ioctl+0xf7c> | |
ffffffff829db54f: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
(real_tty->session != task_session(current))) | |
ffffffff829db556: e8 55 ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db55b: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db562: e9 3d f4 ff ff jmpq ffffffff829da9a4 <tty_ioctl+0xfd4> | |
ffffffff829db567: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
if (retval == -EIO) | |
return -ENOTTY; | |
if (retval) | |
return retval; | |
if (!current->signal->tty || | |
(current->signal->tty != real_tty) || | |
ffffffff829db56e: e8 3d ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db573: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db57a: e9 f6 f3 ff ff jmpq ffffffff829da975 <tty_ioctl+0xfa5> | |
clear = ~val; | |
break; | |
} | |
set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; | |
clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; | |
return tty->ops->tiocmset(tty, set, clear); | |
ffffffff829db57f: 4c 89 ff mov %r15,%rdi | |
ffffffff829db582: 89 95 28 fe ff ff mov %edx,-0x1d8(%rbp) | |
ffffffff829db588: 89 b5 30 fe ff ff mov %esi,-0x1d0(%rbp) | |
ffffffff829db58e: e8 1d ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db593: 8b 95 28 fe ff ff mov -0x1d8(%rbp),%edx | |
ffffffff829db599: 8b b5 30 fe ff ff mov -0x1d0(%rbp),%esi | |
ffffffff829db59f: e9 e9 ea ff ff jmpq ffffffff829da08d <tty_ioctl+0x6bd> | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
return -ENOTTY; | |
if (!real_tty->session) | |
return -ENOTTY; | |
return put_user(pid_vnr(real_tty->session), p); | |
ffffffff829db5a4: 48 89 df mov %rbx,%rdi | |
ffffffff829db5a7: e8 04 ed c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db5ac: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db5b3: e9 76 f0 ff ff jmpq ffffffff829da62e <tty_ioctl+0xc5e> | |
ffffffff829db5b8: 4c 89 95 30 fe ff ff mov %r10,-0x1d0(%rbp) | |
{ | |
struct winsize tmp_ws; | |
if (copy_from_user(&tmp_ws, arg, sizeof(*arg))) | |
return -EFAULT; | |
if (tty->ops->resize) | |
ffffffff829db5bf: e8 ec ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db5c4: 4c 8b 95 30 fe ff ff mov -0x1d0(%rbp),%r10 | |
ffffffff829db5cb: e9 b7 f9 ff ff jmpq ffffffff829daf87 <tty_ioctl+0x15b7> | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
return -ENOTTY; | |
if (!real_tty->session) | |
ffffffff829db5d0: 48 89 df mov %rbx,%rdi | |
ffffffff829db5d3: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db5da: e8 d1 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db5df: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db5e6: e9 fb ef ff ff jmpq ffffffff829da5e6 <tty_ioctl+0xc16> | |
ffffffff829db5eb: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
EXPORT_SYMBOL(tty_unregister_driver); | |
dev_t tty_devnum(struct tty_struct *tty) | |
{ | |
return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index; | |
ffffffff829db5f2: e8 b9 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db5f7: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db5fe: e9 67 f0 ff ff jmpq ffffffff829da66a <tty_ioctl+0xc9a> | |
ffffffff829db603: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db60a: e8 61 ec c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db60f: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db616: e9 81 f0 ff ff jmpq ffffffff829da69c <tty_ioctl+0xccc> | |
ffffffff829db61b: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db622: e8 49 ec c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db627: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db62e: e9 96 f0 ff ff jmpq ffffffff829da6c9 <tty_ioctl+0xcf9> | |
ffffffff829db633: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db63a: e8 31 ec c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db63f: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db646: e9 aa f0 ff ff jmpq ffffffff829da6f5 <tty_ioctl+0xd25> | |
ffffffff829db64b: 89 95 28 fe ff ff mov %edx,-0x1d8(%rbp) | |
ffffffff829db651: 89 b5 30 fe ff ff mov %esi,-0x1d0(%rbp) | |
clear = ~val; | |
break; | |
} | |
set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; | |
clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP; | |
return tty->ops->tiocmset(tty, set, clear); | |
ffffffff829db657: e8 54 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db65c: 8b 95 28 fe ff ff mov -0x1d8(%rbp),%edx | |
ffffffff829db662: 8b b5 30 fe ff ff mov -0x1d0(%rbp),%esi | |
ffffffff829db668: e9 46 ea ff ff jmpq ffffffff829da0b3 <tty_ioctl+0x6e3> | |
} | |
static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr) | |
{ | |
return ((1UL << (nr & (BITS_PER_LONG-1))) & | |
(addr[nr >> _BITOPS_LONG_SHIFT])) != 0; | |
ffffffff829db66d: e8 3e ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db672: e9 51 ee ff ff jmpq ffffffff829da4c8 <tty_ioctl+0xaf8> | |
return -EPERM; | |
if (get_user(ch, p)) | |
return -EFAULT; | |
tty_audit_tiocsti(tty, ch); | |
ld = tty_ldisc_ref_wait(tty); | |
ld->ops->receive_buf(tty, &ch, &mbz, 1); | |
ffffffff829db677: e8 34 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db67c: e9 e5 ec ff ff jmpq ffffffff829da366 <tty_ioctl+0x996> | |
ffffffff829db681: 4c 89 ef mov %r13,%rdi | |
ffffffff829db684: e8 27 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db689: e9 b5 ec ff ff jmpq ffffffff829da343 <tty_ioctl+0x973> | |
break; | |
case TIOCSSERIAL: | |
tty_warn_deprecated_flags(p); | |
break; | |
} | |
if (tty->ops->ioctl) { | |
ffffffff829db68e: e8 1d ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db693: e9 ef e8 ff ff jmpq ffffffff829d9f87 <tty_ioctl+0x5b7> | |
ffffffff829db698: 48 89 d7 mov %rdx,%rdi | |
ffffffff829db69b: e8 10 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6a0: e9 bf e8 ff ff jmpq ffffffff829d9f64 <tty_ioctl+0x594> | |
case TIOCSBRK: /* Turn break on, unconditionally */ | |
if (tty->ops->break_ctl) | |
return tty->ops->break_ctl(tty, -1); | |
return 0; | |
case TIOCCBRK: /* Turn break off, unconditionally */ | |
if (tty->ops->break_ctl) | |
ffffffff829db6a5: e8 06 ec c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6aa: e9 ff ea ff ff jmpq ffffffff829da1ae <tty_ioctl+0x7de> | |
ffffffff829db6af: e8 fc eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6b4: e9 cf ea ff ff jmpq ffffffff829da188 <tty_ioctl+0x7b8> | |
if (!current->signal->leader || current->signal->tty) { | |
ret = -EPERM; | |
goto unlock; | |
} | |
if (tty->session) { | |
ffffffff829db6b9: 4c 89 f7 mov %r14,%rdi | |
ffffffff829db6bc: e8 ef eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6c1: e9 f2 f6 ff ff jmpq ffffffff829dadb8 <tty_ioctl+0x13e8> | |
goto unlock; | |
} | |
} | |
/* See the comment in tty_open(). */ | |
if ((file->f_mode & FMODE_READ) == 0 && !capable(CAP_SYS_ADMIN)) { | |
ffffffff829db6c6: e8 a5 eb c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db6cb: e9 66 f7 ff ff jmpq ffffffff829dae36 <tty_ioctl+0x1466> | |
static int tty_tiocmget(struct tty_struct *tty, int __user *p) | |
{ | |
int retval = -EINVAL; | |
if (tty->ops->tiocmget) { | |
ffffffff829db6d0: e8 db eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6d5: e9 ff ec ff ff jmpq ffffffff829da3d9 <tty_ioctl+0xa09> | |
ffffffff829db6da: e8 d1 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6df: e9 cf ec ff ff jmpq ffffffff829da3b3 <tty_ioctl+0x9e3> | |
case TIOCSPGRP: | |
return tiocspgrp(tty, real_tty, p); | |
case TIOCGSID: | |
return tiocgsid(tty, real_tty, p); | |
case TIOCGETD: | |
return put_user(tty->ldisc->ops->num, (int __user *)p); | |
ffffffff829db6e4: 48 89 df mov %rbx,%rdi | |
ffffffff829db6e7: e8 c4 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6ec: e9 0b f9 ff ff jmpq ffffffff829daffc <tty_ioctl+0x162c> | |
ffffffff829db6f1: e8 ba eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db6f6: e9 df f8 ff ff jmpq ffffffff829dafda <tty_ioctl+0x160a> | |
ffffffff829db6fb: e8 70 eb c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db700: e9 1f f9 ff ff jmpq ffffffff829db024 <tty_ioctl+0x1654> | |
kfree(tty); | |
} | |
static inline struct tty_struct *file_tty(struct file *file) | |
{ | |
return ((struct tty_file_private *)file->private_data)->tty; | |
ffffffff829db705: 48 89 df mov %rbx,%rdi | |
ffffffff829db708: e8 a3 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db70d: e9 a1 e3 ff ff jmpq ffffffff829d9ab3 <tty_ioctl+0xe3> | |
ffffffff829db712: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db719: e8 92 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db71e: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db725: e9 13 e5 ff ff jmpq ffffffff829d9c3d <tty_ioctl+0x26d> | |
return test_and_clear_ti_thread_flag(task_thread_info(tsk), flag); | |
} | |
static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag) | |
{ | |
return test_ti_thread_flag(task_thread_info(tsk), flag); | |
ffffffff829db72a: e8 81 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db72f: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db736: e9 df e4 ff ff jmpq ffffffff829d9c1a <tty_ioctl+0x24a> | |
{ | |
int excl = test_bit(TTY_EXCLUSIVE, &tty->flags); | |
return put_user(excl, (int __user *)p); | |
} | |
case TIOCNOTTY: | |
if (current->signal->tty != tty) | |
ffffffff829db73b: e8 70 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db740: e9 4a f9 ff ff jmpq ffffffff829db08f <tty_ioctl+0x16bf> | |
ffffffff829db745: e8 66 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db74a: e9 17 f9 ff ff jmpq ffffffff829db066 <tty_ioctl+0x1696> | |
ffffffff829db74f: 4c 89 8d 28 fe ff ff mov %r9,-0x1d8(%rbp) | |
if (retval != -ENOIOCTLCMD) | |
return retval; | |
} | |
ld = tty_ldisc_ref_wait(tty); | |
retval = -EINVAL; | |
if (ld->ops->ioctl) { | |
ffffffff829db756: e8 55 eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db75b: 4c 8b 8d 28 fe ff ff mov -0x1d8(%rbp),%r9 | |
ffffffff829db762: e9 ea ed ff ff jmpq ffffffff829da551 <tty_ioctl+0xb81> | |
ffffffff829db767: 4c 89 cf mov %r9,%rdi | |
ffffffff829db76a: 4c 89 8d 28 fe ff ff mov %r9,-0x1d8(%rbp) | |
ffffffff829db771: e8 3a eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db776: 4c 8b 8d 28 fe ff ff mov -0x1d8(%rbp),%r9 | |
ffffffff829db77d: e9 ad ed ff ff jmpq ffffffff829da52f <tty_ioctl+0xb5f> | |
if (get_user(nonblock, p)) | |
return -EFAULT; | |
spin_lock(&file->f_lock); | |
if (nonblock) | |
file->f_flags |= O_NONBLOCK; | |
ffffffff829db782: e8 e9 ea c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db787: e9 b9 e9 ff ff jmpq ffffffff829da145 <tty_ioctl+0x775> | |
else | |
file->f_flags &= ~O_NONBLOCK; | |
ffffffff829db78c: e8 df ea c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db791: e9 4e f9 ff ff jmpq ffffffff829db0e4 <tty_ioctl+0x1714> | |
ffffffff829db796: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
int ret; | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829db79d: e8 0e eb c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db7a2: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db7a9: e9 bd f9 ff ff jmpq ffffffff829db16b <tty_ioctl+0x179b> | |
ffffffff829db7ae: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db7b5: e8 f6 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db7ba: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db7c1: e9 7c f9 ff ff jmpq ffffffff829db142 <tty_ioctl+0x1772> | |
unsigned __user *p) | |
{ | |
int retval; | |
unsigned int set, clear, val; | |
if (tty->ops->tiocmset == NULL) | |
ffffffff829db7c6: e8 e5 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db7cb: e9 45 e8 ff ff jmpq ffffffff829da015 <tty_ioctl+0x645> | |
ffffffff829db7d0: 4c 89 ff mov %r15,%rdi | |
ffffffff829db7d3: e8 d8 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db7d8: e9 12 e8 ff ff jmpq ffffffff829d9fef <tty_ioctl+0x61f> | |
/* | |
* The process must be a session leader and | |
* not have a controlling tty already. | |
*/ | |
if (!current->signal->leader || current->signal->tty) { | |
ffffffff829db7dd: e8 ce ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db7e2: e9 0f f5 ff ff jmpq ffffffff829dacf6 <tty_ioctl+0x1326> | |
ffffffff829db7e7: e8 84 ea c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db7ec: e9 34 f5 ff ff jmpq ffffffff829dad25 <tty_ioctl+0x1355> | |
int ret = 0; | |
tty_lock(tty); | |
read_lock(&tasklist_lock); | |
if (current->signal->leader && (task_session(current) == tty->session)) | |
ffffffff829db7f1: e8 ba ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db7f6: e9 08 f4 ff ff jmpq ffffffff829dac03 <tty_ioctl+0x1233> | |
ffffffff829db7fb: e8 70 ea c1 fe callq ffffffff815fa270 <__asan_report_load4_noabort> | |
ffffffff829db800: e9 2d f4 ff ff jmpq ffffffff829dac32 <tty_ioctl+0x1262> | |
* if pty, return the slave side (real_tty) | |
* otherwise, return self | |
*/ | |
static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty) | |
{ | |
if (tty->driver->type == TTY_DRIVER_TYPE_PTY && | |
ffffffff829db805: e8 a6 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db80a: e9 00 e3 ff ff jmpq ffffffff829d9b0f <tty_ioctl+0x13f> | |
tty->driver->subtype == PTY_TYPE_MASTER) | |
tty = tty->link; | |
ffffffff829db80f: e8 9c ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db814: e9 62 e5 ff ff jmpq ffffffff829d9d7b <tty_ioctl+0x3ab> | |
ffffffff829db819: e8 92 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db81e: e9 6e e2 ff ff jmpq ffffffff829d9a91 <tty_ioctl+0xc1> | |
ffffffff829db823: e8 88 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db828: e9 a8 e2 ff ff jmpq ffffffff829d9ad5 <tty_ioctl+0x105> | |
static int tioccons(struct file *file) | |
{ | |
if (!capable(CAP_SYS_ADMIN)) | |
return -EPERM; | |
if (file->f_op->write == redirected_tty_write) { | |
ffffffff829db82d: e8 7e ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db832: e9 78 ef ff ff jmpq ffffffff829da7af <tty_ioctl+0xddf> | |
ffffffff829db837: e8 74 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db83c: e9 4b ef ff ff jmpq ffffffff829da78c <tty_ioctl+0xdbc> | |
ffffffff829db841: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
{ | |
/* | |
* (tty == real_tty) is a cheap way of | |
* testing if the tty is NOT a master pty. | |
*/ | |
if (tty == real_tty && current->signal->tty != real_tty) | |
ffffffff829db848: e8 63 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db84d: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db854: e9 c8 f9 ff ff jmpq ffffffff829db221 <tty_ioctl+0x1851> | |
ffffffff829db859: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db860: e8 4b ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db865: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db86c: e9 87 f9 ff ff jmpq ffffffff829db1f8 <tty_ioctl+0x1828> | |
ffffffff829db871: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
{ | |
unsigned long flags; | |
struct pid *pgrp, *tty_pgrp; | |
int ret = 0; | |
if (current->signal->tty != tty) | |
ffffffff829db878: e8 33 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db87d: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db884: e9 29 f0 ff ff jmpq ffffffff829da8b2 <tty_ioctl+0xee2> | |
ffffffff829db889: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db890: e8 1b ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db895: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db89c: e9 e8 ef ff ff jmpq ffffffff829da889 <tty_ioctl+0xeb9> | |
} | |
/* | |
* Break handling | |
*/ | |
case TIOCSBRK: /* Turn break on, unconditionally */ | |
if (tty->ops->break_ctl) | |
ffffffff829db8a1: e8 0a ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db8a6: e9 91 ef ff ff jmpq ffffffff829da83c <tty_ioctl+0xe6c> | |
ffffffff829db8ab: e8 00 ea c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db8b0: e9 61 ef ff ff jmpq ffffffff829da816 <tty_ioctl+0xe46> | |
ffffffff829db8b5: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
{ | |
unsigned long flags; | |
struct pid *pgrp, *tty_pgrp; | |
int ret = 0; | |
if (current->signal->tty != tty) | |
ffffffff829db8bc: e8 ef e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db8c1: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db8c8: e9 ca e2 ff ff jmpq ffffffff829d9b97 <tty_ioctl+0x1c7> | |
ffffffff829db8cd: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db8d4: e8 d7 e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db8d9: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db8e0: e9 db e2 ff ff jmpq ffffffff829d9bc0 <tty_ioctl+0x1f0> | |
static void proc_set_tty(struct tty_struct *tty) | |
{ | |
spin_lock_irq(¤t->sighand->siglock); | |
__proc_set_tty(tty); | |
spin_unlock_irq(¤t->sighand->siglock); | |
ffffffff829db8e5: e8 c6 e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db8ea: e9 d1 f5 ff ff jmpq ffffffff829daec0 <tty_ioctl+0x14f0> | |
current->signal->tty_old_pgrp = NULL; | |
} | |
static void proc_set_tty(struct tty_struct *tty) | |
{ | |
spin_lock_irq(¤t->sighand->siglock); | |
ffffffff829db8ef: e8 bc e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db8f4: e9 81 f5 ff ff jmpq ffffffff829dae7a <tty_ioctl+0x14aa> | |
ffffffff829db8f9: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
if (retval == -EIO) | |
return -ENOTTY; | |
if (retval) | |
return retval; | |
if (!current->signal->tty || | |
ffffffff829db900: e8 ab e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db905: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db90c: e9 02 f0 ff ff jmpq ffffffff829da913 <tty_ioctl+0xf43> | |
ffffffff829db911: 4c 89 95 28 fe ff ff mov %r10,-0x1d8(%rbp) | |
ffffffff829db918: e8 93 e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db91d: 4c 8b 95 28 fe ff ff mov -0x1d8(%rbp),%r10 | |
ffffffff829db924: e9 c1 ef ff ff jmpq ffffffff829da8ea <tty_ioctl+0xf1a> | |
static int tiocsti(struct tty_struct *tty, char __user *p) | |
{ | |
char ch, mbz = 0; | |
struct tty_ldisc *ld; | |
if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN)) | |
ffffffff829db929: e8 82 e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db92e: e9 92 e9 ff ff jmpq ffffffff829da2c5 <tty_ioctl+0x8f5> | |
ffffffff829db933: e8 78 e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db938: e9 5f e9 ff ff jmpq ffffffff829da29c <tty_ioctl+0x8cc> | |
/* | |
* The process must be a session leader and | |
* not have a controlling tty already. | |
*/ | |
if (!current->signal->leader || current->signal->tty) { | |
ffffffff829db93d: e8 6e e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db942: e9 41 f4 ff ff jmpq ffffffff829dad88 <tty_ioctl+0x13b8> | |
ffffffff829db947: e8 64 e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db94c: e9 0e f4 ff ff jmpq ffffffff829dad5f <tty_ioctl+0x138f> | |
ffffffff829db951: 48 89 95 20 fe ff ff mov %rdx,-0x1e0(%rbp) | |
ffffffff829db958: 48 89 85 28 fe ff ff mov %rax,-0x1d8(%rbp) | |
static int tty_tiocgicount(struct tty_struct *tty, void __user *arg) | |
{ | |
int retval = -EINVAL; | |
struct serial_icounter_struct icount; | |
memset(&icount, 0, sizeof(icount)); | |
if (tty->ops->get_icount) | |
ffffffff829db95f: e8 4c e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db964: 48 8b 95 20 fe ff ff mov -0x1e0(%rbp),%rdx | |
ffffffff829db96b: 48 8b 85 28 fe ff ff mov -0x1d8(%rbp),%rax | |
ffffffff829db972: e9 38 e5 ff ff jmpq ffffffff829d9eaf <tty_ioctl+0x4df> | |
ffffffff829db977: 48 89 d7 mov %rdx,%rdi | |
ffffffff829db97a: 48 89 95 28 fe ff ff mov %rdx,-0x1d8(%rbp) | |
ffffffff829db981: e8 2a e9 c1 fe callq ffffffff815fa2b0 <__asan_report_load8_noabort> | |
ffffffff829db986: 48 8b 95 28 fe ff ff mov -0x1d8(%rbp),%rdx | |
ffffffff829db98d: e9 f7 e4 ff ff jmpq ffffffff829d9e89 <tty_ioctl+0x4b9> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment