2006-03-13 06:07:25

by emist

[permalink] [raw]
Subject: Kernel Oops-jprobe

Greetings,

The following oops occurs when probing the sys_open function.
Following is the oops and a module with which the error can be
replicated.

[17192145.756000] kobject sysensor: registering. parent: <NULL>, set: module
[17192145.756000] kobject_hotplug
[17192145.756000] fill_kobj_path: path = '/module/sysensor'
[17192145.756000] kobject_hotplug: /sbin/udevsend module seq=1024
HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin ACTION=add
DEVPATH=/module/sysensor SUBSYSTEM=module[17192146.124000] Unable to
handle kernel paging request at virtual address 080c9566
[17192146.124000] printing eip:
[17192146.124000] c01c61ae
[17192146.124000] *pde = 0e124067
[17192146.124000] *pte = 00000000
[17192146.124000] Oops: 0000 [#1]
[17192146.124000] PREEMPT
[17192146.124000] Modules linked in: sysensor ppp_deflate zlib_deflate
bsd_comp ppp_async crc_ccitt ppp_generic slhc ipv6 acpi_cpufreq
speedstep_lib cpufreq_powersave cpufreq_userspace serial_cs
cpufreq_ondemand i915 pcmcia drm video battery container fan button
thermal processor ac ohci1394 yenta_socket rsrc_nonstatic pcmcia_core
ipw2200 ieee80211 ieee80211_crypt firmware_class b44 mii snd_intel8x0
snd_ac97_codec snd_ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm
snd_timer snd soundcore snd_page_alloc i2c_i801 i2c_core generic piix
shpchp pci_hotplug ehci_hcd uhci_hcd usbcore intel_agp agpgart rtc
joydev md_mod dm_mod sr_mod sbp2 scsi_mod ieee1394 psmouse mousedev
parport_pc lp parport unix
[17192146.124000] CPU: 0
[17192146.124000] EIP: 0060:[<c01c61ae>] Not tainted VLI
[17192146.124000] EFLAGS: 00210097 (2.6.15.4)
[17192146.124000] EIP is at vsnprintf+0x235/0x3f4
[17192146.124000] eax: 080c9566 ebx: c03cf1fa ecx: 080c9566 edx: fffffffe
[17192146.124000] esi: c65fbfb8 edi: ffffffff ebp: ffffffff esp: c65fbef4
[17192146.124000] ds: 007b es: 007b ss: 0068
[17192146.124000] Process sh (pid: 25185, threadinfo=c65fa000 task=d33c4a90)
[17192146.124000] Stack: 00000000 c03cf5df 0000000a 00000400 00008802
c03cf1e0 c65fa000 c01c6384
[17192146.124000] c03cf1e0 00000400 e05612e5 c65fbfb0 080c9566
c0116c7d c03cf1e0 00000400
[17192146.124000] e05612cd c65fbfb0 c65fbf84 00000000 b7eaa038
00200046 c03c3acc 00000002
[17192146.124000] Call Trace:
[17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
[17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
[17192146.124000] [<c02a8682>] int3+0x1e/0x24
[17192146.124000] [<c0116c18>] printk+0xe/0x11
[17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
[17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
[17192146.124000] Code: 77 03 c6 03 20 4d 43 85 ed 7f f1 e9 9e 01 00
00 89 f0 89 fa 83 c6 04 8b 08 b8 19 14 2d c0 81 f9 ff 0f 00 00 0f 46
c8 89 c8 eb 06 <80> 38 00 74 07 40 4a 83 fa ff 75 f4 29 c8 f6 04 24 10
89 c7 75
[17192146.124000] <3>Debug: sleeping function called from invalid
context at include/linux/rwsem.h:43
[17192146.124000] in_atomic():1, irqs_disabled():0
[17192146.124000] [<c0114258>] __might_sleep+0x90/0x98
[17192146.124000] [<c0117396>] profile_task_exit+0x12/0x41
[17192146.124000] [<c01188e3>] do_exit+0x16/0x39a
[17192146.124000] [<c0103dda>] do_divide_error+0x0/0x86
[17192146.124000] [<c02a94a2>] do_page_fault+0x3b4/0x561
[17192146.124000] [<c02a90ee>] do_page_fault+0x0/0x561
[17192146.124000] [<c01037df>] error_code+0x4f/0x54
[17192146.124000] [<c01c61ae>] vsnprintf+0x235/0x3f4
[17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
[17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
[17192146.124000] [<c02a8682>] int3+0x1e/0x24
[17192146.124000] [<c0116c18>] printk+0xe/0x11
[17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
[17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
[17192146.124000] note: sh[25185] exited with preempt_count 3

Code to reproduce the error:

#include <linux/module.h>
#include <linux/kprobes.h>
#include <linux/kallsyms.h>

asmlinkage long jsys_open(const char *filename, int flags, int mode);
static struct jprobe jopen = {
.entry = (kprobe_opcode_t *)jsys_open
};
static int register_jumpprobe(struct jprobe *probe, char *name)
{
int ret;
probe->kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name(name);
if(!probe->kp.addr)
{
printk("Couldn't find %s to probe\n", name);
return -1;
}
if((ret = register_jprobe(probe)) < 0)
{
printk("Registration failed, returned %d\n", ret);
return -1;
}
return 0;
}
asmlinkage long jsys_open(const char * filename, int flags, int mode)
{
jprobe_return();
return 0;
}
int init_module(void)
{
register_jumpprobe(&jopen, "sys_open");
return 0;
}


void cleanup_module(void)
{
unregister_jprobe(&jopen);
}
MODULE_LICENSE("GPL");

Have a good one,

Igor H.


2006-03-17 06:20:50

by S. P. Prasanna

[permalink] [raw]
Subject: Re: Kernel Oops-jprobe

On Fri, Mar 17, 2006 at 12:49:51AM +0530, Prasanna S Panchamukhi wrote:
On Mon, Mar 13, 2006 at 01:07:23AM -0500, emist emist wrote:
> Greetings,
>
> The following oops occurs when probing the sys_open function.
> Following is the oops and a module with which the error can be
> replicated.

I tried to recreate on 4-way i386 box, but could not
recreate it.
Could you please give me the config file you used?

Thanks
prasanna

>
> [17192145.756000] kobject sysensor: registering. parent: <NULL>, set: module
> [17192145.756000] kobject_hotplug
> [17192145.756000] fill_kobj_path: path = '/module/sysensor'
> [17192145.756000] kobject_hotplug: /sbin/udevsend module seq=1024
> HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin ACTION=add
> DEVPATH=/module/sysensor SUBSYSTEM=module[17192146.124000] Unable to
> handle kernel paging request at virtual address 080c9566
> [17192146.124000] printing eip:
> [17192146.124000] c01c61ae
> [17192146.124000] *pde = 0e124067
> [17192146.124000] *pte = 00000000
> [17192146.124000] Oops: 0000 [#1]
> [17192146.124000] PREEMPT
> [17192146.124000] Modules linked in: sysensor ppp_deflate zlib_deflate
> bsd_comp ppp_async crc_ccitt ppp_generic slhc ipv6 acpi_cpufreq
> speedstep_lib cpufreq_powersave cpufreq_userspace serial_cs
> cpufreq_ondemand i915 pcmcia drm video battery container fan button
> thermal processor ac ohci1394 yenta_socket rsrc_nonstatic pcmcia_core
> ipw2200 ieee80211 ieee80211_crypt firmware_class b44 mii snd_intel8x0
> snd_ac97_codec snd_ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm
> snd_timer snd soundcore snd_page_alloc i2c_i801 i2c_core generic piix
> shpchp pci_hotplug ehci_hcd uhci_hcd usbcore intel_agp agpgart rtc
> joydev md_mod dm_mod sr_mod sbp2 scsi_mod ieee1394 psmouse mousedev
> parport_pc lp parport unix
> [17192146.124000] CPU: 0
> [17192146.124000] EIP: 0060:[<c01c61ae>] Not tainted VLI
> [17192146.124000] EFLAGS: 00210097 (2.6.15.4)
> [17192146.124000] EIP is at vsnprintf+0x235/0x3f4
> [17192146.124000] eax: 080c9566 ebx: c03cf1fa ecx: 080c9566 edx: fffffffe
> [17192146.124000] esi: c65fbfb8 edi: ffffffff ebp: ffffffff esp: c65fbef4
> [17192146.124000] ds: 007b es: 007b ss: 0068
> [17192146.124000] Process sh (pid: 25185, threadinfo=c65fa000 task=d33c4a90)
> [17192146.124000] Stack: 00000000 c03cf5df 0000000a 00000400 00008802
> c03cf1e0 c65fa000 c01c6384
> [17192146.124000] c03cf1e0 00000400 e05612e5 c65fbfb0 080c9566
> c0116c7d c03cf1e0 00000400
> [17192146.124000] e05612cd c65fbfb0 c65fbf84 00000000 b7eaa038
> 00200046 c03c3acc 00000002
> [17192146.124000] Call Trace:
> [17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
> [17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
> [17192146.124000] [<c02a8682>] int3+0x1e/0x24
> [17192146.124000] [<c0116c18>] printk+0xe/0x11
> [17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
> [17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
> [17192146.124000] Code: 77 03 c6 03 20 4d 43 85 ed 7f f1 e9 9e 01 00
> 00 89 f0 89 fa 83 c6 04 8b 08 b8 19 14 2d c0 81 f9 ff 0f 00 00 0f 46
> c8 89 c8 eb 06 <80> 38 00 74 07 40 4a 83 fa ff 75 f4 29 c8 f6 04 24 10
> 89 c7 75
> [17192146.124000] <3>Debug: sleeping function called from invalid
> context at include/linux/rwsem.h:43
> [17192146.124000] in_atomic():1, irqs_disabled():0
> [17192146.124000] [<c0114258>] __might_sleep+0x90/0x98
> [17192146.124000] [<c0117396>] profile_task_exit+0x12/0x41
> [17192146.124000] [<c01188e3>] do_exit+0x16/0x39a
> [17192146.124000] [<c0103dda>] do_divide_error+0x0/0x86
> [17192146.124000] [<c02a94a2>] do_page_fault+0x3b4/0x561
> [17192146.124000] [<c02a90ee>] do_page_fault+0x0/0x561
> [17192146.124000] [<c01037df>] error_code+0x4f/0x54
> [17192146.124000] [<c01c61ae>] vsnprintf+0x235/0x3f4
> [17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
> [17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
> [17192146.124000] [<c02a8682>] int3+0x1e/0x24
> [17192146.124000] [<c0116c18>] printk+0xe/0x11
> [17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
> [17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
> [17192146.124000] note: sh[25185] exited with preempt_count 3
>
> Code to reproduce the error:
>
> #include <linux/module.h>
> #include <linux/kprobes.h>
> #include <linux/kallsyms.h>
>
> asmlinkage long jsys_open(const char *filename, int flags, int mode);
> static struct jprobe jopen = {
> .entry = (kprobe_opcode_t *)jsys_open
> };
> static int register_jumpprobe(struct jprobe *probe, char *name)
> {
> int ret;
> probe->kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name(name);
> if(!probe->kp.addr)
> {
> printk("Couldn't find %s to probe\n", name);
> return -1;
> }
> if((ret = register_jprobe(probe)) < 0)
> {
> printk("Registration failed, returned %d\n", ret);
> return -1;
> }
> return 0;
> }
> asmlinkage long jsys_open(const char * filename, int flags, int mode)
> {
> jprobe_return();
> return 0;
> }
> int init_module(void)
> {
> register_jumpprobe(&jopen, "sys_open");
> return 0;
> }
>
>
> void cleanup_module(void)
> {
> unregister_jprobe(&jopen);
> }
> MODULE_LICENSE("GPL");
>
> Have a good one,
>
> Igor H.
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

--
Prasanna S Panchamukhi
Linux Technology Center
India Software Labs, IBM Bangalore
Email: [email protected]
Ph: 91-80-51776329

2006-03-17 07:01:28

by S. P. Prasanna

[permalink] [raw]
Subject: Re: Kernel Oops-jprobe

>Greetings,

>The following oops occurs when probing the sys_open function.
>Following is the oops and a module with which the error can be
>replicated.

I tried to recreate this problem on 4-way i386 box, but could not
recreate it. Could you please send me your config file?

Thanks
Prasanna

>[17192145.756000] kobject sysensor: registering. parent: <NULL>, set:
>module
>[17192145.756000] kobject_hotplug
>[17192145.756000] fill_kobj_path: path = '/module/sysensor'
>[17192145.756000] kobject_hotplug: /sbin/udevsend module seq=1024
>HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin ACTION=add
>DEVPATH=/module/sysensor SUBSYSTEM=module[17192146.124000] Unable to
>handle kernel paging request at virtual address 080c9566
>[17192146.124000] printing eip:
>[17192146.124000] c01c61ae
>[17192146.124000] *pde = 0e124067
>[17192146.124000] *pte = 00000000
>[17192146.124000] Oops: 0000 [#1]
>[17192146.124000] PREEMPT
>[17192146.124000] Modules linked in: sysensor ppp_deflate zlib_deflate
>bsd_comp ppp_async crc_ccitt ppp_generic slhc ipv6 acpi_cpufreq
>speedstep_lib cpufreq_powersave cpufreq_userspace serial_cs
>cpufreq_ondemand i915 pcmcia drm video battery container fan button
>thermal processor ac ohci1394 yenta_socket rsrc_nonstatic pcmcia_core
>ipw2200 ieee80211 ieee80211_crypt firmware_class b44 mii snd_intel8x0
>snd_ac97_codec snd_ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm
>shpchp pci_hotplug ehci_hcd uhci_hcd usbcore intel_agp agpgart rtc
>joydev md_mod dm_mod sr_mod sbp2 scsi_mod ieee1394 psmouse mousedev
>parport_pc lp parport unix

--
Prasanna S Panchamukhi
Linux Technology Center
India Software Labs, IBM Bangalore
Email: [email protected]
Ph: 91-80-51776329

2006-03-17 07:06:10

by S. P. Prasanna

[permalink] [raw]
Subject: Re: Kernel Oops-jprobe

On Mon, Mar 13, 2006 at 01:07:23AM -0500, emist emist wrote:
> Greetings,
>
> The following oops occurs when probing the sys_open function.
> Following is the oops and a module with which the error can be
> replicated.

I tried to recreate on 4-way i386 box, but could not
recreate it.
Could you please give me the config file you used?

Thanks
prasanna

>
> [17192145.756000] kobject sysensor: registering. parent: <NULL>, set: module
> [17192145.756000] kobject_hotplug
> [17192145.756000] fill_kobj_path: path = '/module/sysensor'
> [17192145.756000] kobject_hotplug: /sbin/udevsend module seq=1024
> HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin ACTION=add
> DEVPATH=/module/sysensor SUBSYSTEM=module[17192146.124000] Unable to
> handle kernel paging request at virtual address 080c9566
> [17192146.124000] printing eip:
> [17192146.124000] c01c61ae
> [17192146.124000] *pde = 0e124067
> [17192146.124000] *pte = 00000000
> [17192146.124000] Oops: 0000 [#1]
> [17192146.124000] PREEMPT
> [17192146.124000] Modules linked in: sysensor ppp_deflate zlib_deflate
> bsd_comp ppp_async crc_ccitt ppp_generic slhc ipv6 acpi_cpufreq
> speedstep_lib cpufreq_powersave cpufreq_userspace serial_cs
> cpufreq_ondemand i915 pcmcia drm video battery container fan button
> thermal processor ac ohci1394 yenta_socket rsrc_nonstatic pcmcia_core
> ipw2200 ieee80211 ieee80211_crypt firmware_class b44 mii snd_intel8x0
> snd_ac97_codec snd_ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm
> snd_timer snd soundcore snd_page_alloc i2c_i801 i2c_core generic piix
> shpchp pci_hotplug ehci_hcd uhci_hcd usbcore intel_agp agpgart rtc
> joydev md_mod dm_mod sr_mod sbp2 scsi_mod ieee1394 psmouse mousedev
> parport_pc lp parport unix
> [17192146.124000] CPU: 0
> [17192146.124000] EIP: 0060:[<c01c61ae>] Not tainted VLI
> [17192146.124000] EFLAGS: 00210097 (2.6.15.4)
> [17192146.124000] EIP is at vsnprintf+0x235/0x3f4
> [17192146.124000] eax: 080c9566 ebx: c03cf1fa ecx: 080c9566 edx: fffffffe
> [17192146.124000] esi: c65fbfb8 edi: ffffffff ebp: ffffffff esp: c65fbef4
> [17192146.124000] ds: 007b es: 007b ss: 0068
> [17192146.124000] Process sh (pid: 25185, threadinfo=c65fa000 task=d33c4a90)
> [17192146.124000] Stack: 00000000 c03cf5df 0000000a 00000400 00008802
> c03cf1e0 c65fa000 c01c6384
> [17192146.124000] c03cf1e0 00000400 e05612e5 c65fbfb0 080c9566
> c0116c7d c03cf1e0 00000400
> [17192146.124000] e05612cd c65fbfb0 c65fbf84 00000000 b7eaa038
> 00200046 c03c3acc 00000002
> [17192146.124000] Call Trace:
> [17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
> [17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
> [17192146.124000] [<c02a8682>] int3+0x1e/0x24
> [17192146.124000] [<c0116c18>] printk+0xe/0x11
> [17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
> [17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
> [17192146.124000] Code: 77 03 c6 03 20 4d 43 85 ed 7f f1 e9 9e 01 00
> 00 89 f0 89 fa 83 c6 04 8b 08 b8 19 14 2d c0 81 f9 ff 0f 00 00 0f 46
> c8 89 c8 eb 06 <80> 38 00 74 07 40 4a 83 fa ff 75 f4 29 c8 f6 04 24 10
> 89 c7 75
> [17192146.124000] <3>Debug: sleeping function called from invalid
> context at include/linux/rwsem.h:43
> [17192146.124000] in_atomic():1, irqs_disabled():0
> [17192146.124000] [<c0114258>] __might_sleep+0x90/0x98
> [17192146.124000] [<c0117396>] profile_task_exit+0x12/0x41
> [17192146.124000] [<c01188e3>] do_exit+0x16/0x39a
> [17192146.124000] [<c0103dda>] do_divide_error+0x0/0x86
> [17192146.124000] [<c02a94a2>] do_page_fault+0x3b4/0x561
> [17192146.124000] [<c02a90ee>] do_page_fault+0x0/0x561
> [17192146.124000] [<c01037df>] error_code+0x4f/0x54
> [17192146.124000] [<c01c61ae>] vsnprintf+0x235/0x3f4
> [17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
> [17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
> [17192146.124000] [<c02a8682>] int3+0x1e/0x24
> [17192146.124000] [<c0116c18>] printk+0xe/0x11
> [17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
> [17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
> [17192146.124000] note: sh[25185] exited with preempt_count 3
>
> Code to reproduce the error:
>
> #include <linux/module.h>
> #include <linux/kprobes.h>
> #include <linux/kallsyms.h>
>
> asmlinkage long jsys_open(const char *filename, int flags, int mode);
> static struct jprobe jopen = {
> .entry = (kprobe_opcode_t *)jsys_open
> };
> static int register_jumpprobe(struct jprobe *probe, char *name)
> {
> int ret;
> probe->kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name(name);
> if(!probe->kp.addr)
> {
> printk("Couldn't find %s to probe\n", name);
> return -1;
> }
> if((ret = register_jprobe(probe)) < 0)
> {
> printk("Registration failed, returned %d\n", ret);
> return -1;
> }
> return 0;
> }
> asmlinkage long jsys_open(const char * filename, int flags, int mode)
> {
> jprobe_return();
> return 0;
> }
> int init_module(void)
> {
> register_jumpprobe(&jopen, "sys_open");
> return 0;
> }
>
>
> void cleanup_module(void)
> {
> unregister_jprobe(&jopen);
> }
> MODULE_LICENSE("GPL");
>
> Have a good one,
>
> Igor H.
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

--
Prasanna S Panchamukhi
Linux Technology Center
India Software Labs, IBM Bangalore
Email: [email protected]
Ph: 91-80-51776329

2006-03-17 09:31:21

by Balbir Singh

[permalink] [raw]
Subject: Re: Kernel Oops-jprobe

<snip>
> >DEVPATH=/module/sysensor SUBSYSTEM=module[17192146.124000] Unable to
> >handle kernel paging request at virtual address 080c9566

The address looks like a user space address. Since sys_open() passes
user space arguments - in this case a pointer to the filename. Are you
derefencing the pointer correctly?

I think the handler should first copy_from_user().

Moreover your stack is
[17192146.124000] Call Trace:
[17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
[17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
[17192146.124000] [<c02a8682>] int3+0x1e/0x24
[17192146.124000] [<c0116c18>] printk+0xe/0x11
[17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
[17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
[17192146.124000] Code: 77 03 c6 03 20 4d 43 85 ed 7f f1 e9 9e 01 00
00 89 f0 89 fa 83 c6 04 8b 08 b8 19 14 2d c0 81 f9 ff 0f 00 00 0f 46
c8 89 c8 eb 06 <80> 38 00 74 07 40 4a 83 fa ff 75 f4 29 c8 f6 04 24 10
89 c7 75

and in the code posted, there is no printk in jsys_open(). Have you
sent a revised version of your probe module?

Regards,
Balbir

2006-03-17 09:58:59

by S. P. Prasanna

[permalink] [raw]
Subject: Re: Kernel Oops-jprobe

> > >DEVPATH=/module/sysensor SUBSYSTEM=module[17192146.124000] Unable to
> > >handle kernel paging request at virtual address 080c9566
>
> The address looks like a user space address. Since sys_open() passes
> user space arguments - in this case a pointer to the filename. Are you
> derefencing the pointer correctly?
>
> I think the handler should first copy_from_user().

User must not call copy_from_user() in the handler, since preemption is
disabled and the copy_from_user might cause a page fault that might
sleep if the user page is not in the memory. Although the latest patch
posted on lkml tries to fixup the exception, it may some
times not succeed and the data collected might be incorrect.

>
> Moreover your stack is
> [17192146.124000] Call Trace:
> [17192146.124000] [<c01c6384>] vscnprintf+0x17/0x24
> [17192146.124000] [<c0116c7d>] vprintk+0x62/0x22a
> [17192146.124000] [<c02a8682>] int3+0x1e/0x24
> [17192146.124000] [<c0116c18>] printk+0xe/0x11
> [17192146.124000] [<e05610ac>] jsys_open+0x1d/0x28 [sysensor]
> [17192146.124000] [<c0102cef>] sysenter_past_esp+0x54/0x75
> [17192146.124000] Code: 77 03 c6 03 20 4d 43 85 ed 7f f1 e9 9e 01 00
> 00 89 f0 89 fa 83 c6 04 8b 08 b8 19 14 2d c0 81 f9 ff 0f 00 00 0f 46
> c8 89 c8 eb 06 <80> 38 00 74 07 40 4a 83 fa ff 75 f4 29 c8 f6 04 24 10
> 89 c7 75
>
> and in the code posted, there is no printk in jsys_open(). Have you
> sent a revised version of your probe module?

Also from the above stack trace, looks like you had a int3 elsewhere(in printk)
also when jsys_open() was executed.

Thanks
Prasanna
--
Prasanna S Panchamukhi
Linux Technology Center
India Software Labs, IBM Bangalore
Email: [email protected]
Ph: 91-80-51776329

2006-03-17 11:11:40

by Balbir Singh

[permalink] [raw]
Subject: Re: Kernel Oops-jprobe

> > I think the handler should first copy_from_user().
>
> User must not call copy_from_user() in the handler, since preemption is
> disabled and the copy_from_user might cause a page fault that might
> sleep if the user page is not in the memory. Although the latest patch
> posted on lkml tries to fixup the exception, it may some
> times not succeed and the data collected might be incorrect.
>
Yes, you are right. I forgot about the probe handler requirements. In
that case you need to come up with your own trick to get the user
space data. Also look at/use systemtap.

Balbir