openeuler 使用指令查找U盘:输入fdisk -l,内核崩溃 ,系统重启,使用lsblk显示正常,数据传输正常

news2024/11/25 8:51:57

报错日志:

[root@edgenode1 ~]# fdisk -l

Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 4096 bytes

I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/mmcblk0: 116.48 GiB, 125074145280 bytes, 244285440 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: gpt

Disk identifier: 878D3D1E-1622-41C8-C177-AD673846C697

Device Start End Sectors Size Type

/dev/mmcblk0p1 16384 32767 16384 8M unknown

/dev/mmcblk0p2 32768 40959 8192 4M unknown

/dev/mmcblk0p3 40960 565247 524288 256M unknown

/dev/mmcblk0p4 565248 827391 262144 128M unknown

/dev/mmcblk0p5 827392 892927 65536 32M unknown

/dev/mmcblk0p6 892928 244285406 243392479 116.1G unknown

[ 77.879852] Unable to handle kernel paging request at virtual address ffff7fc10593f1be

[ 77.887786] Mem abort info:

[ 77.890602] ESR = 0x96000004

[ 77.893674] EC = 0x25: DABT (current EL), IL = 32 bits

[ 77.898994] SET = 0, FnV = 0

[ 77.902065] EA = 0, S1PTW = 0

[ 77.905215] Data abort info:

[ 77.908089] ISV = 0, ISS = 0x00000004

[ 77.911935] CM = 0, WnR = 0

[ 77.914904] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000001c01000

[ 77.921608] [ffff7fc10593f1be] pgd=0000000000000000, p4d=0000000000000000

[ 77.928398] Internal error: Oops: 96000004 [#1] SMP

[ 77.933267] Modules linked in: sd_mod uas usb_storage scsi_mod xt_comment rtc_aip8563(O)

[ 77.941361] CPU: 6 PID: 1243 Comm: fdisk Tainted: G O 5.10.0 #63

[ 77.948653] Hardware name: Rockchip RK3588 EVB4 LP4 V10 Board (DT)

[ 77.954829] pstate: 00400009 (nzcv daif +PAN -UAO -TCO BTYPE=--)

[ 77.960830] pc : __memcpy+0x2c/0x180

[ 77.964404] lr : kmemdup+0x60/0x90

[ 77.967802] sp : ffff80001362bc80

[ 77.971108] x29: ffff80001362bc80 x28: ffff00011376ac40

[ 77.976411] x27: 0000000000000000 x26: 0000000000000000

[ 77.981714] x25: 0000000000000000 x24: 0000000000000000

[ 77.987016] x23: 00000000480a101d x22: ffff000108d35000

[ 77.992319] x21: ffff7fc10593f1be x20: 0000000000000042

[ 77.997621] x19: ffff00010ab49280 x18: 0000000000000000

[ 78.002924] x17: 0000000000000000 x16: 0000000000000000

[ 78.008225] x15: 0000000000000000 x14: 0000000000000000

[ 78.013526] x13: 0000000000000000 x12: 0000000000000056

[ 78.018828] x11: 0000000000000024 x10: 0000000000000a60

[ 78.024140] x9 : ffff80001022531c x8 : ffff00011376b700

[ 78.029442] x7 : 0000000000000004 x6 : ffff00010ab49280

[ 78.034743] x5 : 0000000000000000 x4 : 0000000000000002

[ 78.040054] x3 : 0000000000000080 x2 : 0000000000000040

[ 78.045356] x1 : ffff7fc10593f1be x0 : ffff00010ab49280

[ 78.050659] Call trace:

[ 78.053102] __memcpy+0x2c/0x180

[ 78.056336] scsi_bios_ptable+0x84/0xe4 [scsi_mod]

[ 78.061128] scsi_partsize+0x24/0x120 [scsi_mod]

[ 78.065748] scsicam_bios_param+0x24/0x114 [scsi_mod]

[ 78.070800] sd_getgeo+0xc8/0xe4 [sd_mod]

[ 78.074805] blkdev_ioctl+0x160/0x2c0

[ 78.078459] block_ioctl+0x44/0x54

[ 78.081860] vfs_ioctl+0x30/0x50

[ 78.085082] __arm64_sys_ioctl+0x68/0x9c

[ 78.089003] el0_svc_common.constprop.0+0x13c/0x1f0

[ 78.093870] do_el0_svc+0x84/0xa4

[ 78.097187] el0_svc+0x20/0x30

[ 78.100241] el0_sync_handler+0xcc/0x154

[ 78.104160] el0_sync+0x1a0/0x1c0

[ 78.107466]

[ 78.107466] PC: 0xffff8000106f266c:

[ 78.112418] 266c cb040060 d65f03c0 d343fc4c b400048c f240081f 540001a0 8b0a0000 8b0a0021

[ 78.120595] 268c cb0a0042 d343fc4c b40003ac f8408403 f8408424 f100058c ca040066 da9f10c7

 

linux内核、用户空间的内存划分:

如下图:32位系统内核空间划分0~3G为用户空间,3~4G为内核空间。详细请参考《Linux用户空间与内核空间》

注意:内核地址空间的范围是 0xC0000000 ~ 0xFFFFFFFF 

而对于64位系统,内核空间划分如下:

ARM64架构处理器采用48位物理寻址机制,最大可以寻找到256TB的物理地址空间。对于目前的应用来说已经足够了,不需要扩展到64位的物理地址寻址。虚拟地址也同样最大支持48位支持,所以在处理器的架构设计上,把虚拟地址空间划分为两个空间,每个空间最大支持256TB。Linux内核在大多数体系结构中都把两个地址空间划分为用户空间和内核空间。

  • 用户空间:0x0000_0000_0000_0000到0x0000_ffff_ffff_ffff

  • 内核空间:0xffff_0000_0000_0000到0xffff_ffff_ffff_ffff

64位的Linux内核已经没有高端内存的概念了,因为48位的寻址空间已经足够大了

在QEMU实验平台上,ARM64架构的LInux内核的内存分布图如下:

如图所示,ARM64架构处理器的Linux内核内存布局图。ARM64架构处理器的Linux内核内存布局如下:

(1)用户空间:0x0000_0000_0000_0000到0x0000_ffff_ffff_ffff,一共有256TB。

(2)非规范区域

(3)内核空间:0xffff_0000_0000_0000到0xffff_ffff_ffff_ffff。一共有256TB。

内核空间又做了如下细分:

  • vmalloc区域:0xffff_0000_0000_0000到0xffff_7bff_bfff_0000,大小为126974GB。
  • vmemmap区域:0xffff_7bff_c000_0000到0xffff_7fff_c000_0000,大小为4096GB。
  • PCI I/O区域:0xffff_7fff_ae00_0000到0xffff_7fff_be00_0000,大小为16MB。
  • Modules区域:0xffff_7fff_c000_0000到0xffff_8000_0000_0000,大小为64MB。
  • normal memory线性映射区:0xffff_8000_0000_0000到0xffff_ffff_ffff_ffff,大小为128TB。

根据地址划分可以看出出问题的内核地址空间在vmemmap区域

vmemmap区域

 vmemmap是内核中page 数据的虚拟地址。针对sparse内存模型。内核申请page获取的page地址从此开始

异常内存访问导致的oops:


1、Unable to handle kernel paging request at virtual address 00000000

         =====》越出内核地址空间范围,原因是由于使用空NULL指针

2、Unable to handle kernel paging request at virtual address 20100110

    =====》越出内核地址空间范围,原因是的内存越界导致该指针

     所在内存被破坏了。 接下来的困难是在什么地方这个内存被修改?为什么被修改?

3、Unable to handle kernel paging request at virtual address c074838c

      =====》没有越出内核地址空间范围,为什么也oops?

     这种情况我称之为:试图篡改受限制内存。比如:声明为const的变量!

     还有其它形式的受限制内存吗?

三、访问受限制内存导致oops:
const在C语言当中声明一个变量为只读,
如果试图直接修改const变量,build阶段编译器,就检查出来,并报read only错误,
如下:
const int i = 1;
i = 10;
build error: assignment of read-only variable 'i'  //只读变量赋值错误

但是如果通过指针间接修改const变量,编译器是检查不出来的。
如下:
const int i = 1;
int *p = &i;    
*p = 10;
不出所料地编译成功了! 但不要高兴,这样的代码是有隐患的!
因为,很显然,我们将变量声明为const,是希望它能受到保护的!
既然编译器检查不出这种隐患,由谁负责保护它呢?
我想,linux只有运行时,由mm模块来保护声明为const的变量了!!!???
但遗憾的是,linux 3.4.5以前的版本一直没有这个保护功能,应该老版本linux自身的漏洞吧!
直到约linux 3.4.67 (android 4.4)才有运行时保护受限制内存的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

右击显示Pycharm打开教程

效果图 操作流程 win r 输入 regedit 回车打开注册表编辑器 2.找到 shell 路径 计算机\HKEY_CLASSES_ROOT\Directory\shell3.在 shell 下新建项,名称为 Pycharm 单击Pycharm文件夹,双击默认项,修改默认值,这个数值就是你右击后…

【蓝桥杯基础题】门牌制作

👑专栏内容:蓝桥杯刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停目录 一、题目描述二、题目分析三、代码汇总1、C++代码2、Java 代码四、总结1、枚举思想2、取余判断每位数字一、题目描述 题目链接:门牌制作 小蓝要为一条街的住户制作门牌号。这条街一共…

linux 系统 安装vnc

准备工作 防火墙设置 放行防火墙 firewall-cmd --add-port5901/tcp --permanent #放行5901端口 firewall-cmd --reload #重新加载生效 如果在测试环境,可直接关闭防火墙 systemctl stop firewalld && systemctl disable firewalld关闭selinux s…

15种稳定扩散模型的技术示例

推荐Stable Diffusion自动纹理工具: DreamTexture.js自动纹理化开发包 什么是稳定扩散模型? 潜在扩散模型 (LDM) 是一种图像生成技术,其工作原理是在潜在表示空间中迭代“去噪”数据,然后将表示解码为完整…

音频行业广告变现,如何破圈升级,解锁收益密码

市场规模不断扩大 音频行业伴随互联网发展多年,是消费者闲暇时间的娱乐项目之一。在行业的不断拓展中,用户渗透率提升,网络音频行业形成了多元化圈层。根据数据统计,网络音频行业在2021年用户规模就已达到6.4亿人,随着…

python爬虫利用代理IP分析大数据

目录 前言 一、什么是代理IP? 二、为什么需要使用代理IP? 1.突破访问限制 2.提高访问速度 3.保护隐私 三、代理IP的分类 1.高匿代理IP 2.普通代理IP 3.透明代理IP 四、如何获取代理IP? 1.免费代理IP网站 2.付费代理IP服务商 五…

java虚拟机的基本结构

一、基本结构: 结构图: 1、类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量&am…

用友GRP-U8 任意文件上传漏洞

用友GRP-U8 任意文件上传漏洞 漏洞描述漏洞影响漏洞危害网络测绘Fofa: app"用友-GRP-U8" 漏洞复现1. 构造poc2. 复现3. 访问webshell 漏洞描述 用友GRP-U8是面向政府及行政事业单位的财政管理应用。 漏洞影响 用友 GRP-U8 漏洞危害 用友 GRP-U8 UploadFileData接…

【C/C++】继承中同名成员处理方式

一、继承中同名成员处理方式 问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢? 访问子类同名成员 直接访问即可访问父类同名成员 需要加作用域 示例: class Base { public:Base…

YOLACT: 实时实例分割

论文:https://arxiv.org/abs/1904.02689 代码:https://github.com/dbolya/yolact 图 1:COCO 上各种实例分割方法的速度性能trade-off。据我们所知,我们是第一个在 COCO test-dev 上达到大约 30 个mask mAP 的实时(超过…

一文带你了解什么是“三渲二”?

一、什么是三渲二? 有没有在电子游戏或动漫作品中看到一些很独特的画面,里面的物体明明看起来是 3D 的模型,可是呈现出来的视觉效果却更偏向 2D 手绘。 这种技术被称为“三渲二”(celshading/toon shading)&#xff…

C++中图的存储

文章目录 0. 实例图1. 邻接矩阵2. 邻接矩阵2.1 链表数组2.2 链式前向星 3. 参考 0. 实例图 考虑下面这样一个图 1. 邻接矩阵 vis[i][j] 表示从i 到j有一条边。直接用二维数组就可以了。 using namespace std; int vertex_num 5; vector<vector<int>> graph(v…

网络中一些重要的协议和技术

全文目录 DNSDNS的基本概念&#xff1a;DNS的工作流程&#xff1a; ICMP 协议ICMP的基本概念&#xff1a;常见的ICMP消息类型&#xff1a;ICMP与IP的关系&#xff1a;为什么ICMP是重要的&#xff1f; NAT协议代理服务器正向代理和反向代理 NAT和代理服务器的区别 DNS DNS (域名…

sass制作一个简单的星空背景

最近遇到一个有意思的东西&#xff0c;需要制作一个如下图的背景&#xff1a; 如果使用js或者canvas应该是比较简单的&#xff0c;正好最近在使用sass&#xff0c;那么纯sass能否实现这种效果呢&#xff1f;来试一下 首先来生成这些点&#xff1a; <div class"conten…

浴池探秘:水疗之旅的魅力与奇妙体验

浴室装饰的时候&#xff0c;选择合适的颜色和瓷砖是至关重要的。设计师推出了一系列的瓷砖&#xff0c;这些瓷砖有着独特的纹理和颜色&#xff0c;适合用于浴室的地板和墙壁。这个系列包括三种不同的面层&#xff1a;Terra&#xff08;大地&#xff09;、Lava&#xff08;熔岩&…

【兔子王赠书第5期】ChatGPT速学通:文案写作+PPT制作+数据分析+知识学习与变现

文章目录 前言ChatGPT推荐图书作者简介内容简介推荐理由 粉丝福利尾声 前言 程序员如果有一天代码写不动了&#xff0c;还能干什么&#xff1f; 一位 80 后女程序员“兰猫”给出了她的答案——转型 AI 写手。兰猫从事程序员工作十余年&#xff0c;在繁重的工作压力下&#xf…

[补题记录] Codeforces Round 906 (Div. 2)(A~D)

URL&#xff1a;https://codeforces.com/contest/1890 目录 A Problem/题意 Thought/思路 Code/代码 B Problem/题意 Thought/思路 Code/代码 C Problem/题意 Thought/思路 Code/代码 D Problem/题意 Thought/思路 Code/代码 A Problem/题意 给出一个数组 A…

【基带开发】AD9361 Accumulator 累加器的用法

IP 核 acc_2048 累加多少个数据&#xff0c;计算方法&#xff1a;23-1211&#xff0c;2^11 2048 IP 使用 acc_2048 ACC1 (.B(12d1 ), // input [11 : 0] b.CLK(ad9361_l_clk ), // input clk.CE(1b1 ), // input ce.BYPASS(clk_gens1…

雪花算法:分布式ID生成的优雅解决方案(建议收藏)

在分布式系统中&#xff0c;唯一ID的生成和管理是一项重要而棘手的任务。雪花算法&#xff0c;由Twitter开源的一种分布式ID生成算法&#xff0c;为这个问题提供了一种优雅的解决方案。本文将详细介绍雪花算法的原理、设计和实现&#xff0c;并通过示例代码和图片帮助读者更好地…

Asterisk Ubuntu 安装

更新环境 sudo apt update sudo apt install wget build-essential git autoconf subversion pkg-config libtool sudo contrib/scripts/get_mp3_source.sh A addons/mp3 A addons/mp3/common.c A addons/mp3/huffman.h A addons/mp3/tabinit.c A addons/mp3/Ma…