安卓内核模块编程

3
我已经编写了一个内核模块。该模块是关于智能手机安全性的论文的一部分。该模块读取文件并通过UDP套接字发送其内容。
该模块在Ubuntu上正常工作。我已将其编译为正确的Android内核(2.6.29)。在Android下,Insmod正常工作。但是,当接收到UDP数据包时会出现一些错误。我怀疑这与文件读取有关。
首先让我们看一下错误消息:
hiJack: Starting LKM!
hiJack: Sending answer!
hiJack: Reading queue!
hiJack: Opening File!
Unable to handle kernel NULL pointer dereference at virtual address 0000001e
pgd = c0004000
[0000001e] *pgd=00000000
Internal error: Oops: 817 [#1]
Modules linked in: hiJack
CPU: 0    Not tainted  (2.6.29 #3)
PC is at readFile+0x84/0xec [hiJack]
LR is at call_rcu+0x28/0x48
pc : [<bf0000ac>]    lr : [<c0069f14>]    psr: a0000013
sp : c2a27ef0  ip : 000007ff  fp : c2a27f0c
r10: c2a27f38  r9 : c2a27f1c  r8 : 00000000
r7 : 00000000  r6 : 00000000  r5 : 00000000  r4 : fffffffe
r3 : 00000000  r2 : 00000000  r1 : bf000b38  r0 : fffffffe
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 00093177  Table: 02bfc000  DAC: 00000017

LR: 0xc0069e94:
9e94  e5831000 e121f002 e89da810 c02fd2d8 e1a0c00d e92dd830 e24cb004 e5801004
9eb4  e10f4000 e3843080 e121f003 e59f101c e59f201c ebffffc7 e3140080 0a000001
9ed4  e121f004 e89da830 e121f004 e89da830 c02fd2ec c03280ec e1a0c00d e92dd830
9ef4  e24cb004 e5801004 e10f4000 e3843080 e121f003 e59f101c e59f201c ebffffb5
9f14  e3140080 0a000001 e121f004 e89da830 e121f004 e89da830 c02fd2d8 c03280b0
9f34  e1a0c00d e92dd8f0 e24cb004 e5913010 e1a04001 e3530000 e1a05000 0a00004c
9f54  e10f2000 e3823080 e121f003 e5903004 e591100c e0610003 e3500000 a594301c
9f74  a5843014 a5843018 aa000003 e2611001 e1710003 55943018 55843014 e5941014

SP: 0xc2a27e70:
7e70  c2a27e94 c2a27e80 60000013 00000004 c6043430 c0312fb8 ffffffff c2a27edc
7e90  00000000 00000000 c2a27f0c c2a27ea8 c024580c c00221d4 fffffffe bf000b38
7eb0  00000000 00000000 fffffffe 00000000 00000000 00000000 00000000 c2a27f1c
7ed0  c2a27f38 c2a27f0c 000007ff c2a27ef0 c0069f14 bf0000ac a0000013 ffffffff
7ef0  c2a26000 00000000 00000000 c783a2c0 c2a27f7c c2a27f10 bf000170 bf000034
7f10  c024778c bf000b24 c02f201c c6043400 00000017 c02f4e10 c6043400 c02f4f80
7f30  c2a27f54 c2a27f40 c0247814 c0247764 c0312f80 c2a26000 c2a27f9c c2a27f58
7f50  c0243e4c c2988240 c2a26000 bf000114 00000000 00000000 00000000 00000000

FP: 0xc2a27e8c:
7e8c  c2a27edc 00000000 00000000 c2a27f0c c2a27ea8 c024580c c00221d4 fffffffe
7eac  bf000b38 00000000 00000000 fffffffe 00000000 00000000 00000000 00000000
7ecc  c2a27f1c c2a27f38 c2a27f0c 000007ff c2a27ef0 c0069f14 bf0000ac a0000013
7eec  ffffffff c2a26000 00000000 00000000 c783a2c0 c2a27f7c c2a27f10 bf000170
7f0c  bf000034 c024778c bf000b24 c02f201c c6043400 00000017 c02f4e10 c6043400
7f2c  c02f4f80 c2a27f54 c2a27f40 c0247814 c0247764 c0312f80 c2a26000 c2a27f9c
7f4c  c2a27f58 c0243e4c c2988240 c2a26000 bf000114 00000000 00000000 00000000
7f6c  00000000 c2a27f9c c2a27f80 c004aaec bf000120 c2988240 c2a26000 c2a27fa4

R9: 0xc2a27e9c:
7e9c  c2a27ea8 c024580c c00221d4 fffffffe bf000b38 00000000 00000000 fffffffe
7ebc  00000000 00000000 00000000 00000000 c2a27f1c c2a27f38 c2a27f0c 000007ff
7edc  c2a27ef0 c0069f14 bf0000ac a0000013 ffffffff c2a26000 00000000 00000000
7efc  c783a2c0 c2a27f7c c2a27f10 bf000170 bf000034 c024778c bf000b24 c02f201c
7f1c  c6043400 00000017 c02f4e10 c6043400 c02f4f80 c2a27f54 c2a27f40 c0247814
7f3c  c0247764 c0312f80 c2a26000 c2a27f9c c2a27f58 c0243e4c c2988240 c2a26000
7f5c  bf000114 00000000 00000000 00000000 00000000 c2a27f9c c2a27f80 c004aaec
7f7c  bf000120 c2988240 c2a26000 c2a27fa4 c2988248 c2a27fd4 c2a27fa0 c004b1f0

R10: 0xc2a27eb8:
7eb8  fffffffe 00000000 00000000 00000000 00000000 c2a27f1c c2a27f38 c2a27f0c
7ed8  000007ff c2a27ef0 c0069f14 bf0000ac a0000013 ffffffff c2a26000 00000000
7ef8  00000000 c783a2c0 c2a27f7c c2a27f10 bf000170 bf000034 c024778c bf000b24
7f18  c02f201c c6043400 00000017 c02f4e10 c6043400 c02f4f80 c2a27f54 c2a27f40
7f38  c0247814 c0247764 c0312f80 c2a26000 c2a27f9c c2a27f58 c0243e4c c2988240
7f58  c2a26000 bf000114 00000000 00000000 00000000 00000000 c2a27f9c c2a27f80
7f78  c004aaec bf000120 c2988240 c2a26000 c2a27fa4 c2988248 c2a27fd4 c2a27fa0
7f98  c004b1f0 c004aa38 d0fe328e 00000000 c6043400 c004eecc c2a27fb0 c2a27fb0
Process hiJack-workqueu (pid: 305, stack limit = 0xc2a26268)
Stack: (0xc2a27ef0 to 0xc2a28000)
7ee0:                                     c2a26000 00000000 00000000 c783a2c0 
7f00: c2a27f7c c2a27f10 bf000170 bf000034 c024778c bf000b24 c02f201c c6043400 
7f20: 00000017 c02f4e10 c6043400 c02f4f80 c2a27f54 c2a27f40 c0247814 c0247764 
7f40: c0312f80 c2a26000 c2a27f9c c2a27f58 c0243e4c c2988240 c2a26000 bf000114 
7f60: 00000000 00000000 00000000 00000000 c2a27f9c c2a27f80 c004aaec bf000120 
7f80: c2988240 c2a26000 c2a27fa4 c2988248 c2a27fd4 c2a27fa0 c004b1f0 c004aa38 
7fa0: d0fe328e 00000000 c6043400 c004eecc c2a27fb0 c2a27fb0 c2a26000 c004b0ec 
7fc0: c2988240 00000000 c2a27ff4 c2a27fd8 c004e9b0 c004b0f8 00000000 00000000 
7fe0: 00000000 00000000 00000000 c2a27ff8 c003da58 c004e964 00000000 0000001b 
Backtrace: 
[<bf000028>] (readFile+0x0/0xec [hiJack]) from [<bf000170>] (send_answer+0x5c/0x174 [hiJack])
 r7:c783a2c0 r6:00000000 r5:00000000 r4:c2a26000
[<bf000114>] (send_answer+0x0/0x174 [hiJack]) from [<c004aaec>] (run_workqueue+0xc0/0x148)
[<c004aa2c>] (run_workqueue+0x0/0x148) from [<c004b1f0>] (worker_thread+0x104/0x118)
 r7:c2988248 r6:c2a27fa4 r5:c2a26000 r4:c2988240
[<c004b0ec>] (worker_thread+0x0/0x118) from [<c004e9b0>] (kthread+0x58/0x94)
 r7:00000000 r6:c2988240 r5:c004b0ec r4:c2a26000
[<c004e958>] (kthread+0x0/0x94) from [<c003da58>] (do_exit+0x0/0x6e0)
 r7:00000000 r6:00000000 r5:00000000 r4:00000000
Code: ee032f10 e1a02007 e1a03fc2 e59f105c (e1c022f0) 
Kernel panic - not syncing: Fatal exception

有人知道出了什么问题吗?如果有人能帮忙,我将非常感激。

这是我添加错误处理后的输出结果。

hiJack: Starting LKM!
hiJack: IN Port: 44552
hiJack: Sending answer!
hiJack: Reading queue!
hiJack: Opening File!
Unable to handle kernel paging request at virtual address fffffffe
pgd = c0004000
[fffffffe] *pgd=004a0031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1]
Modules linked in: hiJack
CPU: 0    Not tainted  (2.6.29 #3)
PC is at send_answer+0x5c/0x198 [hiJack]
LR is at call_rcu+0x28/0x48
pc : [<bf00017c>]    lr : [<c0069f14>]    psr: 20000013
sp : c4ef5f10  ip : 00000000  fp : c4ef5f7c
r10: c4ef5f38  r9 : c4ef5f1c  r8 : 00000000
r7 : 00000000  r6 : c28a36a0  r5 : 00000000  r4 : c4ef4000
r3 : 0000000a  r2 : c03280b0  r1 : 00002710  r0 : fffffffe
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 00093177  Table: 00d58000  DAC: 00000017

LR: 0xc0069e94:
9e94  e5831000 e121f002 e89da810 c02fd2d8 e1a0c00d e92dd830 e24cb004 e5801004
9eb4  e10f4000 e3843080 e121f003 e59f101c e59f201c ebffffc7 e3140080 0a000001
9ed4  e121f004 e89da830 e121f004 e89da830 c02fd2ec c03280ec e1a0c00d e92dd830
9ef4  e24cb004 e5801004 e10f4000 e3843080 e121f003 e59f101c e59f201c ebffffb5
9f14  e3140080 0a000001 e121f004 e89da830 e121f004 e89da830 c02fd2d8 c03280b0
9f34  e1a0c00d e92dd8f0 e24cb004 e5913010 e1a04001 e3530000 e1a05000 0a00004c
9f54  e10f2000 e3823080 e121f003 e5903004 e591100c e0610003 e3500000 a594301c
9f74  a5843014 a5843018 aa000003 e2611001 e1710003 55943018 55843014 e5941014

SP: 0xc4ef5e90:
5e90  c4ef5ee4 00000001 00000000 c2832ee0 00000000 c28a36a0 ffffffff c4ef5efc
5eb0  c28a36a0 00000000 c4ef5f7c c4ef5ec8 c024580c c00221d4 fffffffe 00002710
5ed0  c03280b0 0000000a c4ef4000 00000000 c28a36a0 00000000 00000000 c4ef5f1c
5ef0  c4ef5f38 c4ef5f7c 00000000 c4ef5f10 c0069f14 bf00017c 20000013 ffffffff
5f10  c024778c bf000b94 c4eb801c c59fa400 00000015 c02f4e10 c59fa400 c5dc8000
5f30  c4ef5f54 c4ef5f40 c0247814 c0247764 c0312f80 c4ef4000 c4ef5f9c c4ef5f58
5f50  c0243e4c c2816d60 c4ef4000 bf000120 00000000 00000000 00000000 00000000
5f70  c4ef5f9c c4ef5f80 c004aaec bf00012c c2816d60 c4ef4000 c4ef5fa4 c2816d68

FP: 0xc4ef5efc:
5efc  c4ef5f10 c0069f14 bf00017c 20000013 ffffffff c024778c bf000b94 c4eb801c
5f1c  c59fa400 00000015 c02f4e10 c59fa400 c5dc8000 c4ef5f54 c4ef5f40 c0247814
5f3c  c0247764 c0312f80 c4ef4000 c4ef5f9c c4ef5f58 c0243e4c c2816d60 c4ef4000
5f5c  bf000120 00000000 00000000 00000000 00000000 c4ef5f9c c4ef5f80 c004aaec
5f7c  bf00012c c2816d60 c4ef4000 c4ef5fa4 c2816d68 c4ef5fd4 c4ef5fa0 c004b1f0
5f9c  c004aa38 455b97e6 00000000 c59fa400 c004eecc c4ef5fb0 c4ef5fb0 c4ef4000
5fbc  c004b0ec c2816d60 00000000 c4ef5ff4 c4ef5fd8 c004e9b0 c004b0f8 00000000
5fdc  00000000 00000000 00000000 00000000 c4ef5ff8 c003da58 c004e964 011a5412

R2: 0xc0328030:
8030  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
8050  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
8070  00000000 00000001 00000001 00000000 00000000 00000000 00000000 00000000
8090  00000000 00000000 00000000 00000000 00000000 00000000 00000000 c7810f60
80b0  00000724 00000001 00000000 00000725 c7cbe650 c03280c0 c37cc3c0 c2832ee0
80d0  0000000a 00000000 c03280d4 0000000a 00000000 00000000 00000000 fffffed4
80f0  00000001 00000000 00000000 00000000 c03280fc c03280fc c03280fc 00000000
8110  00000000 c0328110 0000000a 00000000 00000000 00000000 00000000 00008000

R4: 0xc4ef3f80:
3f80  00000008 00000000 44feb4b8 00000000 44feb460 44faefe8 00000000 44fe7fa0
3fa0  00000000 44feb420 006e0061 00000023 4000d1c8 00000000 44faefd0 00000bd7
3fc0  00000000 00000002 00630069 0000001b 4000d520 00000000 00000002 00000000
3fe0  0075005e 00000023 4000de90 00000000 44faefb0 44fec230 00000000 79926933
4000  00000002 00000001 00000000 c59fa400 c02f6d08 00000000 00000017 c0312f80
4020  c4ef4000 00000420 c02f4e10 c59fa400 c6468240 c5dc8000 c4ef5f9c c4ef5f58
4040  c0243e48 00000000 00000000 00000000 00000000 00000000 00000000 00000000
4060  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

R6: 0xc28a3620:
3620  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3640  00000000 00000000 00000000 c01b4b08 00000000 00000000 00000000 00000000
3660  00000000 00000000 00000000 c2920a23 c2920a40 c2920a00 c2920a23 000000e8
3680  00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000
36a0  00000000 00000000 c7b89b80 00000000 00000000 00000000 00000000 c3d46b80
36c0  00000000 00000000 00000000 00000000 00000000 00000011 00000000 00000000
36e0  00000000 00000000 00000000 00000000 00000000 00000011 00000000 0000000e
3700  00060024 00000000 0008000d c01b2ef8 00000001 00000000 00000000 00000000

R9: 0xc4ef5e9c:
5e9c  c2832ee0 00000000 c28a36a0 ffffffff c4ef5efc c28a36a0 00000000 c4ef5f7c
5ebc  c4ef5ec8 c024580c c00221d4 fffffffe 00002710 c03280b0 0000000a c4ef4000
5edc  00000000 c28a36a0 00000000 00000000 c4ef5f1c c4ef5f38 c4ef5f7c 00000000
5efc  c4ef5f10 c0069f14 bf00017c 20000013 ffffffff c024778c bf000b94 c4eb801c
5f1c  c59fa400 00000015 c02f4e10 c59fa400 c5dc8000 c4ef5f54 c4ef5f40 c0247814
5f3c  c0247764 c0312f80 c4ef4000 c4ef5f9c c4ef5f58 c0243e4c c2816d60 c4ef4000
5f5c  bf000120 00000000 00000000 00000000 00000000 c4ef5f9c c4ef5f80 c004aaec
5f7c  bf00012c c2816d60 c4ef4000 c4ef5fa4 c2816d68 c4ef5fd4 c4ef5fa0 c004b1f0

R10: 0xc4ef5eb8:
5eb8  c4ef5f7c c4ef5ec8 c024580c c00221d4 fffffffe 00002710 c03280b0 0000000a
5ed8  c4ef4000 00000000 c28a36a0 00000000 00000000 c4ef5f1c c4ef5f38 c4ef5f7c
5ef8  00000000 c4ef5f10 c0069f14 bf00017c 20000013 ffffffff c024778c bf000b94
5f18  c4eb801c c59fa400 00000015 c02f4e10 c59fa400 c5dc8000 c4ef5f54 c4ef5f40
5f38  c0247814 c0247764 c0312f80 c4ef4000 c4ef5f9c c4ef5f58 c0243e4c c2816d60
5f58  c4ef4000 bf000120 00000000 00000000 00000000 00000000 c4ef5f9c c4ef5f80
5f78  c004aaec bf00012c c2816d60 c4ef4000 c4ef5fa4 c2816d68 c4ef5fd4 c4ef5fa0
5f98  c004b1f0 c004aa38 455b97e6 00000000 c59fa400 c004eecc c4ef5fb0 c4ef5fb0
Process hiJack-workqueu (pid: 269, stack limit = 0xc4ef4268)
Stack: (0xc4ef5f10 to 0xc4ef6000)
5f00:                                     c024778c bf000b94 c4eb801c c59fa400 
5f20: 00000015 c02f4e10 c59fa400 c5dc8000 c4ef5f54 c4ef5f40 c0247814 c0247764 
5f40: c0312f80 c4ef4000 c4ef5f9c c4ef5f58 c0243e4c c2816d60 c4ef4000 bf000120 
5f60: 00000000 00000000 00000000 00000000 c4ef5f9c c4ef5f80 c004aaec bf00012c 
5f80: c2816d60 c4ef4000 c4ef5fa4 c2816d68 c4ef5fd4 c4ef5fa0 c004b1f0 c004aa38 
5fa0: 455b97e6 00000000 c59fa400 c004eecc c4ef5fb0 c4ef5fb0 c4ef4000 c004b0ec 
5fc0: c2816d60 00000000 c4ef5ff4 c4ef5fd8 c004e9b0 c004b0f8 00000000 00000000 
5fe0: 00000000 00000000 00000000 c4ef5ff8 c003da58 c004e964 011a5412 10f80005 
Backtrace: 
[<bf000120>] (send_answer+0x0/0x198 [hiJack]) from [<c004aaec>] (run_workqueue+0xc0/0x148)
[<c004aa2c>] (run_workqueue+0x0/0x148) from [<c004b1f0>] (worker_thread+0x104/0x118)
 r7:c2816d68 r6:c4ef5fa4 r5:c4ef4000 r4:c2816d60
[<c004b0ec>] (worker_thread+0x0/0x118) from [<c004e9b0>] (kthread+0x58/0x94)
 r7:00000000 r6:c2816d60 r5:c004b0ec r4:c4ef4000
[<c004e958>] (kthread+0x0/0x94) from [<c003da58>] (do_exit+0x0/0x6e0)
 r7:00000000 r6:00000000 r5:00000000 r4:00000000
Code: eb490d30 e1a01005 e59f0124 ebffffaa (e5d03000) 
Kernel panic - not syncing: Fatal exception

谢谢!

1
在找到好的答案后编辑掉重要部分是不好的行为。 - dmeister
2个回答

1

在调用以下代码时,值得加入一些错误检查:


phMscd_Filp = filp_open(filename, O_RDONLY, 0);

在尝试取消引用结果指针之前,请确保...

使用IS_ERR()宏检查filp_open()返回的值。 例如,来自fs/reiserfs/journal.c文件:


journal->j_dev_file = filp_open(jdev_name, 0, 0);
if(!IS_ERR(journal->j_dev_file)) {
  // snip
} else {
  result = PTR_ERR(journal->j_dev_file);
  // dump a warning using the return code
}

好的。但是文件已经存在,我想读取它...我该如何在这里捕获错误?谢谢您的快速回答! - bloxtr
嗨,我现在已经安装了错误处理程序。但我仍然遇到错误。也许有人有其他的想法来解决这个问题。谢谢。 - bloxtr

0

我找到了错误,请不要笑!请检查保存路径的字符串:D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接