Changes between Version 2 and Version 3 of Dev/KernelHack/COINS/worklog/201110


Ignore:
Timestamp:
Oct 18, 2011 12:35:10 PM (9 years ago)
Author:
mitty
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Dev/KernelHack/COINS/worklog/201110

    v2 v3  
    529529 
    530530 * GDBによるステップ実行は、3000行ほど実行してみたがguest側で結果が出力されないので、断念 
     531 
     532 = 10/14 = 
     533 == getcpu system call == 
     534 * http://www.kernel.org/doc/man-pages/online/pages/man2/getcpu.2.html 
     535 * http://www.linuxquestions.org/questions/programming-9/determine-what-cpu-my-thread-is-on-817697/ 
     536 
     537 * getcpu system callはには存在しない 
     538  * arch/x86/include/asm/unistd_64.h 
     539{{{#!cc 
     540#define __IGNORE_getcpu         /* implemented as a vsyscall */ 
     541}}} 
     542 
     543 * s0711489@ubuntu-lucid64:~/coursework/KernelHack/02$ cat > getcpu.c 
     544{{{#!cc 
     545#define _GNU_SOURCE         /* See feature_test_macros(7) */ 
     546#include <linux/getcpu.h> 
     547#include <stdio.h> 
     548 
     549int main (void) { 
     550        int c, s; 
     551        s = getcpu(&c, NULL, NULL); 
     552        printf ("getcpu() -> %d\n", (s == -1) ? s : c); 
     553} 
     554}}} 
     555 * s0711489@ubuntu-lucid64:~/coursework/KernelHack/02$ gcc getcpu.c -o getcpu 
     556{{{ 
     557getcpu.c:1:26: error: linux/getcpu.h: No such file or directory 
     558}}} 
     559 
     560 === i386 === 
     561 * s0711489@ubuntu-lucid:~$ sudo /mnt/hgfs/tools/install.sh 
     562{{{ 
     563+ cat /mnt/hgfs/linux-2.6.35.14/include/config/kernel.release 
     564+ VERSION=2.6.35.14 
     565+ echo Install Linux Kernel version 2.6.35.14 
     566Install Linux Kernel version 2.6.35.14 
     567+ cd /mnt/hgfs/linux-2.6.35.14/ 
     568+ make install 
     569sh /mnt/hgfs/linux-2.6.35.14/arch/x86/boot/install.sh 2.6.35.14 arch/x86/boot/bzImage \ 
     570                System.map "/boot" 
     571+ make modules_install 
     572  INSTALL arch/x86/kernel/test_nx.ko 
     573  INSTALL drivers/scsi/scsi_wait_scan.ko 
     574  INSTALL net/netfilter/xt_mark.ko 
     575  DEPMOD  2.6.35.14 
     576+ mkinitramfs -o /boot/initrd.img-2.6.35.14 2.6.35.14 
     577+ update-grub 
     578Generating grub.cfg ... 
     579Found linux image: /boot/vmlinuz-2.6.35.14 
     580Found initrd image: /boot/initrd.img-2.6.35.14 
     581Found linux image: /boot/vmlinuz-2.6.32-33-generic 
     582Found initrd image: /boot/initrd.img-2.6.32-33-generic 
     583Found memtest86+ image: /boot/memtest86+.bin 
     584done 
     585+ echo Install Kernel Headers to /lib/modules/2.6.35.14/build 
     586Install Kernel Headers to /lib/modules/2.6.35.14/build 
     587+ date +%Y%m%d 
     588+ mv /lib/modules/2.6.35.14/build /lib/modules/2.6.35.14/build-20111014 
     589+ cd /mnt/hgfs/ 
     590+ tar c --files-from - 
     591+ tar x -C /lib/modules/2.6.35.14/ 
     592+ egrep -v vmlinu 
     593+ egrep -v .o$ 
     594+ find linux-2.6.35.14 -type f 
     595+ mv /lib/modules/2.6.35.14/linux-2.6.35.14 /lib/modules/2.6.35.14/build 
     596+ uname -a 
     597Linux ubuntu-lucid 2.6.32-33-generic #72-Ubuntu SMP Fri Jul 29 21:08:37 UTC 2011 i686 GNU/Linux 
     598}}} 
     599 * s0711489@ubuntu-lucid:~$ sudo vmware-config-tools.pl --default 
     600 
     601 * s0711489@ubuntu-lucid:~$ cat > getcpu.c 
     602{{{#!cc 
     603#define _GNU_SOURCE 
     604 
     605#include <stdio.h> 
     606#include <sys/syscall.h> 
     607#include <unistd.h> 
     608#include <errno.h> 
     609#include <string.h> 
     610 
     611int main( void ) 
     612{ 
     613        int cpu = syscall(SYS_getcpu); 
     614        if (cpu < 0) 
     615        { 
     616                printf( "Error: errno = %d\n", errno ); fflush(stdout); 
     617                printf( "Error: errno: %s\n", strerror(errno) ); fflush(stdout); 
     618                return -1; 
     619        } 
     620        printf( "cpu = %d\n", cpu ); 
     621 
     622        return 0; 
     623} 
     624}}} 
     625 
     626 * s0711489@ubuntu-lucid:~$ gcc getcpu.c -o getcpu 
     627 * s0711489@ubuntu-lucid:~$ ./getcpu 
     628{{{ 
     629Error: errno = 14 
     630Error: errno: Bad address 
     631}}} 
     632 
     633 * うまく動かない 
     634 
     635 == getuid system call == 
     636 * windell57:x86_64 s0711489$ gdb 
     637{{{ 
     638(gdb) set logging file gdb.getuid.log 
     639(gdb) set logging on 
     640Copying output to gdb.getuid.log. 
     641(gdb) file vmlinux 
     642Reading symbols from /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/vmlinux...(no debugging symbols found)...done. 
     643(gdb) b sys_getuid 
     644Breakpoint 1 at 0xffffffff81048d17: file kernel/timer.c, line 1366. 
     645(gdb) target remote localhost:8864 
     646Remote debugging using localhost:8864 
     6470xffffffff810097a9 in native_safe_halt () 
     648    at /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/arch/x86/include/asm/irqflags.h:49 
     64949              asm volatile("sti; hlt": : :"memory"); 
     650(gdb) c 
     651Continuing. 
     652 
     653Breakpoint 1, sys_getuid () at kernel/timer.c:1366 
     6541366    { 
     655(gdb) s 
     6561368            return current_uid(); 
     657(gdb) 
     658get_current () 
     659    at /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/arch/x86/include/asm/current.h:14 
     66014              return percpu_read_stable(current_task); 
     661(gdb) 
     6621368            return current_uid(); 
     663(gdb) 
     664sys_getuid () at kernel/timer.c:1366 
     6651366    { 
     666(gdb) 
     6671368            return current_uid(); 
     668(gdb) 
     669get_current () at kernel/timer.c:1368 
     6701368            return current_uid(); 
     671(gdb) 
     672sys_getuid () at kernel/timer.c:1369 
     6731369    } 
     674(gdb) 
     675 
     676Program received signal SIGINT, Interrupt. 
     6770xffffffff810097a9 in native_safe_halt () 
     678    at /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/arch/x86/include/asm/irqflags.h:49 
     67949              asm volatile("sti; hlt": : :"memory"); 
     680(gdb) detach 
     681Ending remote debugging. 
     682(gdb) quit 
     683}}} 
     684 
     685 * s0711489@ubuntu-lucid64:~/coursework/KernelHack/02$ ./getuid 
     686{{{ 
     687getuid() -> 1000 
     688}}} 
     689 
     690 === trace log with source list and print data === 
     691 * windell57:x86_64 s0711489$ gdb 
     692{{{ 
     693(gdb) file vmlinux 
     694Reading symbols from /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/vmlinux...(no debugging symbols found)...done. 
     695(gdb) b sys_getuid 
     696Breakpoint 1 at 0xffffffff81048d17: file kernel/timer.c, line 1366. 
     697(gdb) target remote localhost:8864 
     698Remote debugging using localhost:8864 
     6990xffffffff810097a9 in native_safe_halt () 
     700    at /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/arch/x86/include/asm/irqflags.h:49 
     70149              asm volatile("sti; hlt": : :"memory"); 
     702(gdb) c 
     703Continuing. 
     704 
     705Breakpoint 1, sys_getuid () at kernel/timer.c:1366 
     7061366    { 
     707(gdb) bt 
     708#0  sys_getuid () at kernel/timer.c:1366 
     709#1  0xffffffff810029eb in ?? () 
     710#2  0x0000000000000206 in ?? () 
     711#3  0x00007ffff56d6ad0 in ?? () 
     712#4  0x00007f8671347210 in ?? () 
     713#5  0x00007f8671333300 in ?? () 
     714#6  0x0000000000000066 in ?? () 
     715#7  0x0000000000000000 in ?? () 
     716(gdb) l 
     7171361 
     7181362            return pid; 
     7191363    } 
     7201364 
     7211365    SYSCALL_DEFINE0(getuid) 
     7221366    { 
     7231367            /* Only we change this so SMP safe */ 
     7241368            return current_uid(); 
     7251369    } 
     7261370 
     727(gdb) s 
     7281368            return current_uid(); 
     729(gdb) 
     730get_current () 
     731    at /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/arch/x86/include/asm/current.h:14 
     73214              return percpu_read_stable(current_task); 
     733(gdb) bt 
     734#0  get_current () 
     735    at /home/ugrad/07/s0711489/coursework/KernelHack/linux-2.6.35.14/x86_64/arch/x86/include/asm/current.h:14 
     736#1  sys_getuid () at kernel/timer.c:1368 
     737#2  0xffffffff810029eb in ?? () 
     738#3  0x0000000000000206 in ?? () 
     739#4  0x00007ffff56d6ad0 in ?? () 
     740#5  0x00007f8671347210 in ?? () 
     741#6  0x00007f8671333300 in ?? () 
     742#7  0x0000000000000066 in ?? () 
     743#8  0x0000000000000000 in ?? () 
     744(gdb) l 
     7459 
     74610      DECLARE_PER_CPU(struct task_struct *, current_task); 
     74711 
     74812      static __always_inline struct task_struct *get_current(void) 
     74913      { 
     75014              return percpu_read_stable(current_task); 
     75115      } 
     75216 
     75317      #define current get_current() 
     75418 
     755(gdb) p current_task 
     756Cannot access memory at address 0xb540 
     757(gdb) ptype current_task 
     758type = struct task_struct { 
     759 
     760(snip 
     761 
     762---Type <return> to continue, or q <return> to quit---q 
     763Quit 
     764(gdb) s 
     7651368            return current_uid(); 
     766(gdb) 
     767sys_getuid () at kernel/timer.c:1366 
     7681366    { 
     769(gdb) bt 
     770#0  sys_getuid () at kernel/timer.c:1366 
     771#1  0xffffffff810029eb in ?? () 
     772#2  0x0000000000000206 in ?? () 
     773#3  0x00007ffff56d6ad0 in ?? () 
     774#4  0x00007f8671347210 in ?? () 
     775#5  0x00007f8671333300 in ?? () 
     776#6  0x0000000000000066 in ?? () 
     777#7  0x0000000000000000 in ?? () 
     778(gdb) s 
     7791368            return current_uid(); 
     780(gdb) 
     781get_current () at kernel/timer.c:1368 
     7821368            return current_uid(); 
     783(gdb) bt 
     784#0  get_current () at kernel/timer.c:1368 
     785#1  sys_getuid () at kernel/timer.c:1368 
     786#2  0xffffffff810029eb in ?? () 
     787#3  0x0000000000000206 in ?? () 
     788#4  0x00007ffff56d6ad0 in ?? () 
     789#5  0x00007f8671347210 in ?? () 
     790#6  0x00007f8671333300 in ?? () 
     791#7  0x0000000000000066 in ?? () 
     792#8  0x0000000000000000 in ?? () 
     793(gdb) l 
     7941363    } 
     7951364 
     7961365    SYSCALL_DEFINE0(getuid) 
     7971366    { 
     7981367            /* Only we change this so SMP safe */ 
     7991368            return current_uid(); 
     8001369    } 
     8011370 
     8021371    SYSCALL_DEFINE0(geteuid) 
     8031372    { 
     804(gdb) s 
     805sys_getuid () at kernel/timer.c:1369 
     8061369    } 
     807(gdb) bt 
     808#0  sys_getuid () at kernel/timer.c:1369 
     809#1  0xffffffff810029eb in ?? () 
     810#2  0x0000000000000206 in ?? () 
     811#3  0x00007ffff56d6ad0 in ?? () 
     812#4  0x00007f8671347210 in ?? () 
     813#5  0x00007f8671333300 in ?? () 
     814#6  0x0000000000000066 in ?? () 
     815#7  0x0000000000000000 in ?? () 
     816(gdb) l 
     8171364 
     8181365    SYSCALL_DEFINE0(getuid) 
     8191366    { 
     8201367            /* Only we change this so SMP safe */ 
     8211368            return current_uid(); 
     8221369    } 
     8231370 
     8241371    SYSCALL_DEFINE0(geteuid) 
     8251372    { 
     8261373            /* Only we change this so SMP safe */ 
     827(gdb) p current_uid 
     828No symbol "current_uid" in current context. 
     829(gdb) ptype current_uid 
     830No symbol "current_uid" in current context. 
     831(gdb) s 
     832 
     833Breakpoint 1, sys_getuid () at kernel/timer.c:1366 
     8341366    { 
     835(gdb) detach 
     836Ending remote debugging. 
     837}}} 
     838 
     839 * include/linux/cred.h 
     840{{{#!cc 
     841#define current_cred_xxx(xxx)                   \ 
     842({                                              \ 
     843        current->cred->xxx;                     \ 
     844}) 
     845 
     846#define current_uid()           (current_cred_xxx(uid)) 
     847#define current_gid()           (current_cred_xxx(gid)) 
     848 
     849(snip) 
     850}}} 
     851 
     852 * ptype of current_task->cred 
     853{{{ 
     854(gdb) ptype current_task->cred 
     855type = const struct cred { 
     856    atomic_t usage; 
     857    uid_t uid; 
     858    gid_t gid; 
     859    uid_t suid; 
     860    gid_t sgid; 
     861    uid_t euid; 
     862    gid_t egid; 
     863    uid_t fsuid; 
     864    gid_t fsgid; 
     865    unsigned int securebits; 
     866    kernel_cap_t cap_inheritable; 
     867    kernel_cap_t cap_permitted; 
     868    kernel_cap_t cap_effective; 
     869    kernel_cap_t cap_bset; 
     870    unsigned char jit_keyring; 
     871    struct key *thread_keyring; 
     872    struct key *request_key_auth; 
     873    struct thread_group_cred *tgcred; 
     874    void *security; 
     875    struct user_struct *user; 
     876    struct group_info *group_info; 
     877    struct rcu_head rcu; 
     878} * 
     879(gdb) ptype current_task->cred->uid 
     880type = unsigned int 
     881}}}