linux内核错误:BUG: unable to handle kernel paging request at virtual address
使用内核中的AES加密算法对数据进行加解密,编写函数如下,
int mycipher_test(char *alg,int encflag,char *code,char *key),其中第一个参数alg是AES加密算法的标志,第二个参数
encflag是判断加密还是解密,第三个参数code是要加解密的数据,第四个参数key是密钥。
该函数以模块的方式编译进内核。
具体代码如下:
int mycipher_test(char *alg,int encflag,char *code,char *key)
{
int ret,keylen,codelen;
struct scatterlist sg;
char *result;
struct crypto_tfm *tfm;
keylen = 16;
codelen = strlen(code);
/*限制传入的数据是16字节,因为AES加密算法要求加密数据的长度为16字节整数倍*/
if(codelen!=16){
return -1;
}
/* Allocate transform for AES ECB mode */
tfm = crypto_alloc_tfm(alg,0);
if(IS_ERR(tfm)) {
printk("<1>failed to load transform for aes ECB mode !\n");
return -1;
}
/*设置加密密钥*/
ret = crypto_cipher_setkey(tfm,key,keylen);
if(ret) {
printk("<1>failed to setkey \n");
goto failed1;
}
sg_init_one(&sg,code,16);//?
switch(encflag){
case 0:/*加密*/
ret = crypto_cipher_encrypt(tfm,&sg,&sg,16);//可能出错处
if(ret) {
printk("<1>encrypt failed \n");
goto failed1;
}
crypto_free_tfm(tfm);
return 0;
break;
case 1:/*解密*/
ret = crypto_cipher_decrypt(tfm,&sg,&sg,16);//可能出错处
if(ret) {
printk("<1>dencrypt failed \n");
goto failed1;
}
crypto_free_tfm(tfm);
return 0;
break;
default:
printk("error\n");
return -1;
}
failed1:
crypto_free_tfm(tfm);
return -1;
}
在内核中,当调用该函数,对数据进行加解密时,出现如下错误:
BUG: unable to handle kernel paging request at virtual address 0000120c
printing eip:
c101b0d2
*pde = 16cc1067
Oops: 0000 [#1]
SMP
Modules linked in: autofs4 hidp rfcomm l2cap bluetooth sunrpc ip_conntrack_netbios_ns ipt_REJECT xt_state ip_conntrack nfnetlink iptable_filter ip_tables ip6t_REJECT xt_tcpudp ip6table_filter ip6_tables x_tables acpiphp video sbs i2c_ec button battery asus_acpi ac aes ipv6 lp snd_ens1371 sg gameport snd_rawmidi snd_ac97_codec snd_ac97_bus snd_seq_dummy floppy i2c_piix4 snd_seq_oss pcspkr snd_seq_midi_event i2c_core snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm pcnet32 snd_timer snd soundcore mii snd_page_alloc parport_pc parport serio_raw ide_cd cdrom dm_snapshot dm_zero dm_mirror dm_mod mptspi mptscsih mptbase scsi_transport_spi sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
CPU: 0
EIP: 0060:[<c101b0d2>] Not tainted VLI
EFLAGS: 00010212 (2.6.18.1 #82)
EIP is at kmap_atomic+0x1b/0x7f
eax: 00000001 ebx: 00000007 ecx: c1cc2840 edx: 00000000
esi: 00000010 edi: d718fdac ebp: 00000010 esp: d718fd10
ds: 007b es: 007b ss: 0068
Process firefox-bin (pid: 4309, ti=d718f000 task=c0a03870 task.ti=d718f000)
Stack: d718fd4c c10c1f9e d404d000 c10c2553 d718fd7c d672a800 00000010 00000003
d404d000 d718fd9c c1cc2840 c1350761 00000010 00000010 0000084e d718fd9c
c1cc2840 00000000 00000010 00000010 0000084e c10c21e7 0000084e d718fdac
Call Trace:
[<c10c1f9e>] scatterwalk_map+0x2c/0x34
[<c10c2553>] crypt+0xbd/0x1f1
[<c10c21e7>] ecb_process+0x0/0x4b
[<c10c273c>] ecb_decrypt+0x33/0x38
[<e0a5b42e>] aes_decrypt+0x0/0xf62 [aes]
[<c10c21e7>] ecb_process+0x0/0x4b
[<c10c213e>] setkey+0x24/0x27
[<c10c32ae>] mycipher_test+0x10e/0x150
[<c118e7ce>] sock_recvmsg+0x162/0x19b
[<c103334d>] autoremove_wake_function+0x0/0x2d
[<c11eae0b>] schedule+0x907/0x9b4
[<c1057bef>] find_extend_vma+0x12/0x49
[<c1036067>] get_futex_key+0x40/0xd0
[<c118fdfe>] sys_recvfrom+0xcf/0x137
[<c1037092>] do_futex+0x20d/0xabc
[<c10d31d1>] vsnprintf+0x419/0x457
[<c1026b6d>] current_fs_time+0x4a/0x55
[<c107b5fe>] touch_atime+0x60/0x92
[<c107028f>] pipe_readv+0x315/0x321
[<c118fe7f>] sys_recv+0x19/0x1d
[<c11902aa>] sys_socketcall+0x117/0x19e
[<c1003d0b>] syscall_call+0x7/0xb
Code: 01 00 00 c1 e8 0c c1 e0 05 03 05 10 06 38 c1 c3 53 89 c1 89 e0 89 d3 25 00 f0 ff ff ff 40 14 8b 01 c1 e8 1e 8b 14 85 ac e6 2b c1 <8b> 82 0c 12 00 00 05 80 37 00 00 39 c2 74 08 5b 89 c8 e9 b0 8c
EIP: [<c101b0d2>] kmap_atomic+0x1b/0x7f SS:ESP 0068:d718fd10
这个错误困扰很久了,请各位大侠赐教。
相关推荐
linux内核bug 修复日志根因
linux内核bug 修复日志根因
linux程序编译的错误问题
linux程序编译的错误问题-需注意
Linux内核或应用程序异常终止调试方法
Linux内核或应用程序异常终止调试方法
弱电网下光伏并网逆变器序阻抗建模仿真复现扫频法【序阻抗判断稳定性】
内容概要:本文聚焦于弱电网条件下光伏并网逆变器的序阻抗建模与稳定性分析,系统阐述了基于扫频法的阻抗特性仿真与复现方法。通过构建正负序阻抗模型,深入剖析逆变器在弱电网环境中的动态响应特性,结合锁相环、电流环等关键控制环节对系统阻抗的影响机制,采用序阻抗稳定性判据评估多机并网或复杂电网条件下的系统稳定裕度。研究在Simulink平台中实现激励信号注入、频率响应采集与阻抗曲线绘制,为高比例新能源接入背景下并网系统的稳定性分析提供了可靠的仿真手段与理论支撑,尤其适用于SCI级别论文成果的复现与拓展验证。; 适合人群:电力电子、新能源并网技术及相关领域的硕士/博士研究生、科研人员,以及从事光伏逆变器、微电网稳定控制开发的工程技术人员。; 使用场景及目标:①掌握扫频法在电力电子装置阻抗建模中的具体实施流程;②理解并应用基于序阻抗的稳定性判据进行系统稳定边界分析;③用于高水平学术论文(如SCI期刊)中阻抗建模与稳定性分析部分的仿真复现与方法验证; 阅读建议:建议读者结合文中所述方法与提供的参考文献,自主搭建Simulink仿真模型,逐步完成扰动信号设计、数据采集、傅里叶分析及阻抗拟合全过程,深入探究控制参数变化对系统阻抗特性和稳定性的具体影响,强化理论与实践的融合能力。
三相并网逆变器虚拟阻抗+统一有源阻尼策略SVPWM+SPWM调制仿真
内容概要:本文档系统性地介绍了三相并网逆变器的核心控制技术及其在复杂电网环境下的仿真应用,重点涵盖虚拟阻抗与统一有源阻尼策略在SVPWM和SPWM调制方式下的实现方法,旨在提升逆变器的稳定性与电能质量。内容包括无功功率扰动孤岛检测、中点电位平衡控制、低电压穿越(LVRT)、模型预测控制(MPC)、正负序分离、电网前馈控制等关键技术,并扩展至风储联合调频、微电网下垂控制、虚拟同步发电机(VSG)、构网型逆变器等多种典型电力系统应用场景。所有技术均配有基于Simulink/Matlab平台的完整仿真模型、参考文献及说明文档,强调理论分析与仿真实践的深度融合,突出科研中“借力”与创新思维的重要性。; 适合人群:电气工程、自动化、新能源等相关专业的研究生、科研人员及从事电力电子与可再生能源系统开发的工程师;具备MATLAB/Simulink仿真基础和电力系统专业知识的技术人员。; 使用场景及目标:①开展三相并网逆变器控制策略的研究与优化设计;②复现高水平学术论文中的控制算法;③完成毕业课题、科研项目或工程仿真验证;④掌握虚拟阻抗、有源阻尼、SVPWM/SPWM调制、MPC、VSG等核心技术的建模与实现方法;⑤支撑微电网、构网型变流器等前沿方向的科研攻关。; 阅读建议:建议按照资源目录结构化学习,优先选择与自身研究方向契合的内容模块,结合提供的仿真模型、参考文献和说明材料进行实操演练,注重从理论推导到仿真实现的全过程理解,充分利用共享网盘资源深化技术掌握,提升科研效率与创新能力。


