<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://criu.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rppt</id>
	<title>CRIU - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://criu.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rppt"/>
	<link rel="alternate" type="text/html" href="https://criu.org/Special:Contributions/Rppt"/>
	<updated>2026-05-15T13:13:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.6</generator>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5611</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5611"/>
		<updated>2025-03-04T18:22:49Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Add support for arm64 Guarded Control Stack (GCS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@lists.linux.dev mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Add support for memory compression ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support compression for page images&lt;br /&gt;
 &lt;br /&gt;
We would like to support memory page files compression&lt;br /&gt;
in CRIU using one of the fastest algorithms (it's matter&lt;br /&gt;
of discussion which one to choose!).&lt;br /&gt;
&lt;br /&gt;
This task does not require any Linux kernel modifications&lt;br /&gt;
and scope is limited to CRIU itself. At the same time it's&lt;br /&gt;
complex enough as we need to touch memory dump/restore codepath&lt;br /&gt;
in CRIU and also handle many corner cases like page-server and stuff.&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Mentors: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use eBPF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
* https://blog.zeyady.com/2021-08-16/gsoc-criu&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Prajwal S N &amp;lt;prajwalnadig21@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Files on detached mounts ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Initial support of open files on &amp;quot;detached&amp;quot; mounts&lt;br /&gt;
&lt;br /&gt;
When criu dumps a process with an open fd on a file, it gets the mount identifier (mnt_id) via /proc/&amp;lt;pid&amp;gt;/fdinfo/&amp;lt;fd&amp;gt;, so that criu knows from which exact mount the file was initially opened. This way criu can restore this fd by opening the same exact file from topologically the same mount in restored mount tree.&lt;br /&gt;
&lt;br /&gt;
Restoring fd from the right mount can be important in different cases, for instance if the process would later want to resolve paths relative to the fd, and obviously resolving from the same file on different mount can lead to different resolved paths, or if the process wants to check path to the file via /proc/&amp;lt;pid&amp;gt;/fd/&amp;lt;fd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
But we have a problem finding on which mount we need to reopen the file at restore if we only know mnt_id but can't find this mnt_id in /proc/&amp;lt;pid&amp;gt;/mountinfo.&lt;br /&gt;
&lt;br /&gt;
Mountinfo file shows the mount tree topology of current mntns: parent - child relations, sharing group information, mountpoint and fs root information. And if we don't see mnt_id in it we don't know anything about this mount.&lt;br /&gt;
&lt;br /&gt;
This can happen in two cases&lt;br /&gt;
&lt;br /&gt;
* 1) external mount or file - if file was opened from e.g. host it's mount would not be visible in container mountinfo&lt;br /&gt;
* 2) mount was lazily unmounted&lt;br /&gt;
&lt;br /&gt;
In case of 1) we have criu options to help criu handle external dependencies.&lt;br /&gt;
&lt;br /&gt;
In case of 2) or no options provided criu can't resolve mnt_id in mountinfo and criu fails.&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
We can handle 2) with: resolving major/minor via fstat, using name_to_handle_at and open_by_handle_at to open same file on any other available mount from same superblock (same major/minor) in container. Now we have fd2 of the same file as fd, but on existing mount we can dump it as usual instead, and mark it as &amp;quot;detached&amp;quot; in image, now criu on restore knows where to find this file, but instead of just opening fd2 from actually restored mount, we create a temporary bindmount which is lazy unmounted just after open making the file appear as a file on detached mount.&lt;br /&gt;
&lt;br /&gt;
Known problems with this approach:&lt;br /&gt;
&lt;br /&gt;
* Stat on btrfs gives wrong major/minor&lt;br /&gt;
* file handles does not work everywhere&lt;br /&gt;
* file handles can return fd2 on deleted file or on other hardlink, this needs special handling.&lt;br /&gt;
&lt;br /&gt;
Additionally (optional part):&lt;br /&gt;
We can export real major/minor in fdinfo (kernel).&lt;br /&gt;
We can think of new kernel interface to get mount's major/minor and root (shift from fsroot) for detached mounts, if we have it we don't need file handle hack to find file on other mount (see fsinfo or getvalues kernel patches in LKML, can we add this info there?).&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Checkpointing of POSIX message queues ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Add support for checkpoint/restore of POSIX message queues&lt;br /&gt;
&lt;br /&gt;
POSIX message queues are a widely used inter-process communication mechanism. Message queues are implemented as files on a virtual filesystem (mqueue), where a file descriptor (message queue descriptor) is used to perform operations such as sending or receiving messages. To support checkpoint/restore of POSIX message queues, we need a kernel interface (similar to [https://github.com/checkpoint-restore/criu/commit/8ce9e947051e43430eb2ff06b96dddeba467b4fd MSG_PEEK]) that would enable the retrieval of messages from a queue without removing them. This project aims to implement such an interface that allows retrieving all messages and their priorities from a POSIX message queue.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/2285&lt;br /&gt;
* https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/ipc/mqueue.c&lt;br /&gt;
* https://www.man7.org/tlpi/download/TLPI-52-POSIX_Message_Queues.pdf&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;, Prajwal S N &amp;lt;prajwalnadig21@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for arm64 Guarded Control Stack (GCS) ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support arm64 Guarded Control Stack (GCS)&lt;br /&gt;
 &lt;br /&gt;
The arm64 Guarded Control Stack (GCS) feature provides support for&lt;br /&gt;
hardware protected stacks of return addresses, intended to provide&lt;br /&gt;
hardening against return oriented programming (ROP) attacks and to make&lt;br /&gt;
it easier to gather call stacks for applications such as profiling (taken from [1]).&lt;br /&gt;
We would like to support arm64 Guarded Control Stack (GCS) in CRIU, which means&lt;br /&gt;
that CRIU should be able to Checkpoint/Restore applications using GCS.&lt;br /&gt;
&lt;br /&gt;
This task should not require any Linux kernel modifications&lt;br /&gt;
but will require a lot of effort to understand Linux kernel and&lt;br /&gt;
glibc support patches. We have a good example of support for&lt;br /&gt;
x86 shadow stack [4].&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [1] kernel support https://lore.kernel.org/all/20241001-arm64-gcs-v13-0-222b78d87eee@kernel.org&lt;br /&gt;
* [2] libc support https://inbox.sourceware.org/libc-alpha/20250117174119.3254972-1-yury.khrustalev@arm.com&lt;br /&gt;
* [3] libc tests https://inbox.sourceware.org/libc-alpha/20250210114538.1723249-1-yury.khrustalev@arm.com&lt;br /&gt;
* [4] x86 support https://github.com/checkpoint-restore/criu/pull/2306&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (a lot of moving parts: Linux kernel / libc / CRIU)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@kernel.org&amp;gt;&lt;br /&gt;
* Mentors: Mike Rapoport &amp;lt;rppt@kernel.org&amp;gt;, Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;, Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coordinated checkpointing of distributed applications ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Enable coordinated container checkpointing with Kubernetes.&lt;br /&gt;
&lt;br /&gt;
Checkpointing support has been recently introduced in Kubernetes, where the&lt;br /&gt;
smallest deployable unit is a Pod (a group of containers).  Kubernetes is often&lt;br /&gt;
used to deploy applications that are distributed across multiple nodes.&lt;br /&gt;
However, checkpointing such distributed applications requires a coordination&lt;br /&gt;
mechanism to synchronize the checkpoint and restore operations. To address this&lt;br /&gt;
challenge, we have developed a new tool called &amp;lt;code&amp;gt;criu-coordinator&amp;lt;/code&amp;gt;&lt;br /&gt;
that relies on the action-script functionality of CRIU to enable synchronization&lt;br /&gt;
in distributed environments. This project aims to extend this tool to enable&lt;br /&gt;
seamless integration with the checkpointing functionality of Kubernetes.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu-coordinator&lt;br /&gt;
* https://lpc.events/event/18/contributions/1803/&lt;br /&gt;
* https://sched.co/1YeT4&lt;br /&gt;
* https://kubernetes.io/blog/2022/12/05/forensic-container-checkpointing-alpha/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: Rust / Go / C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Prajwal S N &amp;lt;prajwalnadig21@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suspended project ideas ==&lt;br /&gt;
&lt;br /&gt;
Listed here are tasks that seem suitable for GSoC, but currently do not have anybody to mentor it.&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
The io_uring Asynchronous I/O (AIO) framework is a new Linux I/O interface, first introduced in upstream Linux kernel version 5.1 (March 2019). It provides a low-latency and feature-rich interface for applications that require AIO functionality.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework&lt;br /&gt;
* https://github.com/axboe/liburing&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (+linux kernel)&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
We already had a couple (3) of tries for this problem:&lt;br /&gt;
&lt;br /&gt;
* UDP_REPAIR approach didn't succeed: https://lore.kernel.org/netdev/721a2e32-c930-ad6b-5055-631b502ed11b@gmail.com/, https://lore.kernel.org/netdev/?q=udp_repair&lt;br /&gt;
* eBPF (CRIB) approach, socket queue iterator was not merged: https://lore.kernel.org/netdev/AM6PR03MB5848EDA002E3D7EACA7C6BDA99A52@AM6PR03MB5848.eurprd03.prod.outlook.com/, and we have general objections to CRIB approach https://lore.kernel.org/bpf/CAHk-=wjLWFa3i6+Tab67gnNumTYipj_HuheXr2RCq4zn0tCTzA@mail.gmail.com/&lt;br /&gt;
&lt;br /&gt;
We still have one idea we didn't try, as UDP allows packets to be lost on the way on restore we can somehow mark the socket to drop all data before UNCORK. This way we don't really need to restore contents of UDP CORK-ed sockets send queue.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* https://github.com/criupatchwork/criu/commit/a532312&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;, Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5591</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5591"/>
		<updated>2025-02-14T12:06:46Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Add support for memory compression ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support compression for page images&lt;br /&gt;
 &lt;br /&gt;
We would like to support memory page files compression&lt;br /&gt;
in CRIU using one of the fastest algorithms (it's matter&lt;br /&gt;
of discussion which one to choose!).&lt;br /&gt;
&lt;br /&gt;
This task does not require any Linux kernel modifications&lt;br /&gt;
and scope is limited to CRIU itself. At the same time it's&lt;br /&gt;
complex enough as we need to touch memory dump/restore codepath&lt;br /&gt;
in CRIU and also handle many corner cases like page-server and stuff.&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* https://github.com/criupatchwork/criu/commit/a532312&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;, Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use eBPF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
* https://blog.zeyady.com/2021-08-16/gsoc-criu&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Prajwal S N &amp;lt;prajwalnadig21@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Files on detached mounts ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Initial support of open files on &amp;quot;detached&amp;quot; mounts&lt;br /&gt;
&lt;br /&gt;
When criu dumps a process with an open fd on a file, it gets the mount identifier (mnt_id) via /proc/&amp;lt;pid&amp;gt;/fdinfo/&amp;lt;fd&amp;gt;, so that criu knows from which exact mount the file was initially opened. This way criu can restore this fd by opening the same exact file from topologically the same mount in restored mount tree.&lt;br /&gt;
&lt;br /&gt;
Restoring fd from the right mount can be important in different cases, for instance if the process would later want to resolve paths relative to the fd, and obviously resolving from the same file on different mount can lead to different resolved paths, or if the process wants to check path to the file via /proc/&amp;lt;pid&amp;gt;/fd/&amp;lt;fd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
But we have a problem finding on which mount we need to reopen the file at restore if we only know mnt_id but can't find this mnt_id in /proc/&amp;lt;pid&amp;gt;/mountinfo.&lt;br /&gt;
&lt;br /&gt;
Mountinfo file shows the mount tree topology of current mntns: parent - child relations, sharing group information, mountpoint and fs root information. And if we don't see mnt_id in it we don't know anything about this mount.&lt;br /&gt;
&lt;br /&gt;
This can happen in two cases&lt;br /&gt;
&lt;br /&gt;
* 1) external mount or file - if file was opened from e.g. host it's mount would not be visible in container mountinfo&lt;br /&gt;
* 2) mount was lazily unmounted&lt;br /&gt;
&lt;br /&gt;
In case of 1) we have criu options to help criu handle external dependencies.&lt;br /&gt;
&lt;br /&gt;
In case of 2) or no options provided criu can't resolve mnt_id in mountinfo and criu fails.&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
We can handle 2) with: resolving major/minor via fstat, using name_to_handle_at and open_by_handle_at to open same file on any other available mount from same superblock (same major/minor) in container. Now we have fd2 of the same file as fd, but on existing mount we can dump it as usual instead, and mark it as &amp;quot;detached&amp;quot; in image, now criu on restore knows where to find this file, but instead of just opening fd2 from actually restored mount, we create a temporary bindmount which is lazy unmounted just after open making the file appear as a file on detached mount.&lt;br /&gt;
&lt;br /&gt;
Known problems with this approach:&lt;br /&gt;
&lt;br /&gt;
* Stat on btrfs gives wrong major/minor&lt;br /&gt;
* file handles does not work everywhere&lt;br /&gt;
* file handles can return fd2 on deleted file or on other hardlink, this needs special handling.&lt;br /&gt;
&lt;br /&gt;
Additionally (optional part):&lt;br /&gt;
We can export real major/minor in fdinfo (kernel).&lt;br /&gt;
We can think of new kernel interface to get mount's major/minor and root (shift from fsroot) for detached mounts, if we have it we don't need file handle hack to find file on other mount (see fsinfo or getvalues kernel patches in LKML, can we add this info there?).&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Checkpointing of POSIX message queues ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Add support for checkpoint/restore of POSIX message queues&lt;br /&gt;
&lt;br /&gt;
POSIX message queues are a widely used inter-process communication mechanism. Message queues are implemented as files on a virtual filesystem (mqueue), where a file descriptor (message queue descriptor) is used to perform operations such as sending or receiving messages. To support checkpoint/restore of POSIX message queues, we need a kernel interface (similar to [https://github.com/checkpoint-restore/criu/commit/8ce9e947051e43430eb2ff06b96dddeba467b4fd MSG_PEEK]) that would enable the retrieval of messages from a queue without removing them. This project aims to implement such an interface that allows retrieving all messages and their priorities from a POSIX message queue.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/2285&lt;br /&gt;
* https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/ipc/mqueue.c&lt;br /&gt;
* https://www.man7.org/tlpi/download/TLPI-52-POSIX_Message_Queues.pdf&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;, Prajwal S N &amp;lt;prajwalnadig21@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kubernetes operator for managing container checkpoints ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Develop a Kubernetes operator that automates the management of container checkpoints&lt;br /&gt;
&lt;br /&gt;
Container checkpointing has recently been introduced as an alpha feature in Kubernetes.&lt;br /&gt;
To enable this feature, the kubelet API was extended with an endpoint that enables the&lt;br /&gt;
creation of checkpoints for individual containers. By default, all container checkpoints&lt;br /&gt;
are stored as tar archives in &amp;lt;code&amp;gt;/var/lib/kubelet/checkpoints&amp;lt;/code&amp;gt; using the following&lt;br /&gt;
file name format: &amp;lt;code&amp;gt;checkpoint-&amp;lt;pod-name&amp;gt;_&amp;lt;namespace-name&amp;gt;-&amp;lt;container-name&amp;gt;-&amp;lt;timestamp&amp;gt;.tar&amp;lt;/code&amp;gt;.&lt;br /&gt;
However, the current implementation does not provide a mechanism for limiting the number&lt;br /&gt;
of checkpoints, which may lead to filling up all existing disk space. This project aims to&lt;br /&gt;
develop a Kubernetes operator that automates the management of checkpoints and provides&lt;br /&gt;
a garbage collection mechanism to discard obsolete checkpoints.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/checkpoint-restore-operator&lt;br /&gt;
* https://kubernetes.io/docs/reference/node/kubelet-checkpoint-api/&lt;br /&gt;
* https://kubernetes.io/blog/2022/12/05/forensic-container-checkpointing-alpha/&lt;br /&gt;
* https://kubernetes.io/blog/2023/03/10/forensic-container-analysis/&lt;br /&gt;
* https://github.com/kubernetes/kubernetes/pull/115888&lt;br /&gt;
* https://github.com/kubernetes/enhancements/issues/2008&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;, Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Prajwal S N &amp;lt;prajwalnadig21@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber&lt;br /&gt;
&lt;br /&gt;
== Suspended project ideas ==&lt;br /&gt;
&lt;br /&gt;
Listed here are tasks that seem suitable for GSoC, but currently do not have anybody to mentor it.&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
The io_uring Asynchronous I/O (AIO) framework is a new Linux I/O interface, first introduced in upstream Linux kernel version 5.1 (March 2019). It provides a low-latency and feature-rich interface for applications that require AIO functionality.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework&lt;br /&gt;
* https://github.com/axboe/liburing&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (+linux kernel)&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC_completed_projects&amp;diff=5590</id>
		<title>GSoC completed projects</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC_completed_projects&amp;diff=5590"/>
		<updated>2025-02-14T12:06:19Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Add support for pidfd file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of pidfd descriptors&lt;br /&gt;
&lt;br /&gt;
There is pidfd_open syscall which allows opening&lt;br /&gt;
a special PID file descriptor. A user can send a signal to&lt;br /&gt;
the process (pidfd_send_signal syscall), wait for the process&lt;br /&gt;
(poll() on pidfd).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have pidfd's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/801319/&lt;br /&gt;
* https://lwn.net/Articles/794707/&lt;br /&gt;
* https://github.com/torvalds/linux/blob/v5.16/kernel/fork.c#L1877&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Christian Brauner &amp;lt;christian@brauner.io&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for memfd_secret file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of memfd_secret descriptors&lt;br /&gt;
&lt;br /&gt;
There is memfd_secret syscall which allows user to open&lt;br /&gt;
special memfd which is backed by special memory range which&lt;br /&gt;
is inaccessible by another processes (and the kernel too!).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have memfd_secret's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/865256/&lt;br /&gt;
* https://warusadura.github.io/gsoc23-final-report.html&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/pull/2247&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Mike Rapoport &amp;lt;mike.rapoport@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Forensic analysis of container checkpoints ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Extending go-crit with capabilities for forensic analysis&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/checkpointctl&lt;br /&gt;
&lt;br /&gt;
The go-crit tool was created during GSoC 2022 to enable analysis of CRIU [[images]] with tools written in Go. It allows container management tools such as [https://github.com/checkpoint-restore/checkpointctl checkpointctl] and Podman to provide capabilities similar to CRIT. The goal of this project is to extend go-crit with functionality for forensic analysis of container checkpoints to provide a better user experience.&lt;br /&gt;
&lt;br /&gt;
The go-crit tool is still in its early stages of development. To effectively utilise this new feature, the checkpointctl tool would be extended to display information about the processes included in a container checkpoint and their runtime state (e.g., memory, open files, sockets, etc).&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://criu.org/CRIT_(Go_library)&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/tree/master/crit&lt;br /&gt;
* https://kubernetes.io/blog/2022/12/05/forensic-container-checkpointing-alpha/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Restrict checks for open/mmaped files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Make sure the file opened (for fd or mapping) at restore is &amp;quot;the same&amp;quot; as it was on dump&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/criu/pull/1123&lt;br /&gt;
&lt;br /&gt;
CRIU doesn't carry files contents (except for ghost ones) into images. Thus on dump it saves some &amp;quot;meta&amp;quot; for file to validate it's &amp;quot;the same&amp;quot; on restore. Currently this meta includes only the file size. The task is to add some cookie value that's somehow affected by file's contents. This is primarily needed to reduce the possibility to restore with wrong libraries.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/Category:Files&lt;br /&gt;
* https://en.wikipedia.org/wiki/File_verification&lt;br /&gt;
&lt;br /&gt;
=== Optimize the pre-dump algorithm ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/criu/commit/98608b90de0f853b1c8a6e15b312320e1441c359 &lt;br /&gt;
&lt;br /&gt;
Current [[CLI/cmd/pre-dump|pre-dump]] mode is used to write task memory contents into image&lt;br /&gt;
files w/o stopping the task for too long. It does this by stopping the task, infecting it and&lt;br /&gt;
draining all the memory into a set of pipes. Then the task is cured, resumed and the pipes'&lt;br /&gt;
contents is written into images (maybe a [[page server]]). Unfortunately, this approach creates&lt;br /&gt;
a big stress on the memory subsystem, as keeping all memory in pipes creates a lot of unreclaimable&lt;br /&gt;
memory (pages in pipes are not swappable), as well as the number of pipes themselves can be huge, as&lt;br /&gt;
one pipe doesn't store more than a fixed amount of data (see pipe(7) man page).&lt;br /&gt;
&lt;br /&gt;
A solution for this problem is to use a sys_read_process_vm() syscall, which will mitigate&lt;br /&gt;
all of the above. To do this we need to allocate a temporary buffer in criu, then walk the&lt;br /&gt;
target process vm by copying the memory piece-by-piece into it, then flush the data into image&lt;br /&gt;
(or page server), and repeat.&lt;br /&gt;
&lt;br /&gt;
Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as&lt;br /&gt;
the read_process_vm does, but vmsplices the data&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Memory pre dump]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/351&lt;br /&gt;
* [[Memory dumping and restoring]], [[Memory changes tracking]]&lt;br /&gt;
* [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2018/1/9/32 RFC for splice_process_vm syscall]&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/go-criu/pull/66&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT (Go library)]]&lt;br /&gt;
* https://github.com/snprajwal/gsoc-2022&lt;br /&gt;
&lt;br /&gt;
=== Support sparse ghosts ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' While sparse ghost files were in part supported for quiet some time, we still was not able to handle big sparse ghost files and highly fragmented sparse ghost files effectively.&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/criu/pull/1944 https://github.com/checkpoint-restore/criu/pull/1963&lt;br /&gt;
&lt;br /&gt;
When criu dumps processes it also dumps files that are opened by them. It does this by saving file names by which the files are accessible. But sometimes files can have no names. It may happen if a task opened a file and then removed it. To dump this file criu cannot save its name (because the name doesn't exist). Instead criu saves the whole file. This is called &amp;quot;ghost file&amp;quot;. Since saving the whole file is very expensive (copying lots of data on disk) criu limits the maximum size of a ghost file. The latter is also not good, because there are &amp;quot;sparse&amp;quot; files, that are large in size, but may be small from the real disk usage perspective. The goal of the task is to support sparse ghost files, i.e. limit the size of the ghost not by its length but by disk usage and when copying the data detect the used blocks and save only those.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
 &lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sparse_file Sparse files]&lt;br /&gt;
*[[Dumping files]]&lt;br /&gt;
*[[Invisible files]]&lt;br /&gt;
*[https://www.kernel.org/doc/html/latest/filesystems/fiemap.html Fiemap ioctl]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5410</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5410"/>
		<updated>2023-04-25T15:38:39Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Add Andreiy as mentor for CORK-ed UDP socket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* https://github.com/criupatchwork/criu/commit/a532312&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for pidfd file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of pidfd descriptors&lt;br /&gt;
&lt;br /&gt;
There is pidfd_open syscall which allows opening&lt;br /&gt;
a special PID file descriptor. A user can send a signal to&lt;br /&gt;
the process (pidfd_send_signal syscall), wait for the process&lt;br /&gt;
(poll() on pidfd).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have pidfd's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/801319/&lt;br /&gt;
* https://lwn.net/Articles/794707/&lt;br /&gt;
* https://github.com/torvalds/linux/blob/v5.16/kernel/fork.c#L1877&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Christian Brauner &amp;lt;christian@brauner.io&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for memfd_secret file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of memfd_secret descriptors&lt;br /&gt;
&lt;br /&gt;
There is memfd_secret syscall which allows user to open&lt;br /&gt;
special memfd which is backed by special memory range which&lt;br /&gt;
is inaccessible by another processes (and the kernel too!).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have memfd_secret's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/865256/&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Mike Rapoport &amp;lt;mike.rapoport@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Forensic analysis of container checkpoints ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Extending go-crit with capabilities for forensic analysis&lt;br /&gt;
&lt;br /&gt;
The go-crit tool was created during GSoC 2022 to enable analysis of CRIU [[images]] with tools written in Go. It allows container management tools such as [https://github.com/checkpoint-restore/checkpointctl checkpointctl] and Podman to provide capabilities similar to CRIT. The goal of this project is to extend go-crit with functionality for forensic analysis of container checkpoints to provide a better user experience.&lt;br /&gt;
&lt;br /&gt;
The go-crit tool is still in its early stages of development. To effectively utilise this new feature, the checkpointctl tool would be extended to display information about the processes included in a container checkpoint and their runtime state (e.g., memory, open files, sockets, etc).&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://criu.org/CRIT_(Go_library)&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/tree/master/crit&lt;br /&gt;
* https://kubernetes.io/blog/2022/12/05/forensic-container-checkpointing-alpha/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;, Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use eBPF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
* https://blog.zeyady.com/2021-08-16/gsoc-criu&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Files on detached mounts ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Initial support of open files on &amp;quot;detached&amp;quot; mounts&lt;br /&gt;
&lt;br /&gt;
When criu dumps a process with an open fd on a file, it gets the mount identifier (mnt_id) via /proc/&amp;lt;pid&amp;gt;/fdinfo/&amp;lt;fd&amp;gt;, so that criu knows from which exact mount the file was initially opened. This way criu can restore this fd by opening the same exact file from topologically the same mount in restored mount tree.&lt;br /&gt;
&lt;br /&gt;
Restoring fd from the right mount can be important in different cases, for instance if the process would later want to resolve paths relative to the fd, and obviously resolving from the same file on different mount can lead to different resolved paths, or if the process wants to check path to the file via /proc/&amp;lt;pid&amp;gt;/fd/&amp;lt;fd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
But we have a problem finding on which mount we need to reopen the file at restore if we only know mnt_id but can't find this mnt_id in /proc/&amp;lt;pid&amp;gt;/mountinfo.&lt;br /&gt;
&lt;br /&gt;
Mountinfo file shows the mount tree topology of current mntns: parent - child relations, sharing group information, mountpoint and fs root information. And if we don't see mnt_id in it we don't know anything about this mount.&lt;br /&gt;
&lt;br /&gt;
This can happen in two cases&lt;br /&gt;
&lt;br /&gt;
* 1) external mount or file - if file was opened from e.g. host it's mount would not be visible in container mountinfo&lt;br /&gt;
* 2) mount was lazily unmounted&lt;br /&gt;
&lt;br /&gt;
In case of 1) we have criu options to help criu handle external dependencies.&lt;br /&gt;
&lt;br /&gt;
In case of 2) or no options provided criu can't resolve mnt_id in mountinfo and criu fails.&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
We can handle 2) with: resolving major/minor via fstat, using name_to_handle_at and open_by_handle_at to open same file on any other available mount from same superblock (same major/minor) in container. Now we have fd2 of the same file as fd, but on existing mount we can dump it as usual instead, and mark it as &amp;quot;detached&amp;quot; in image, now criu on restore knows where to find this file, but instead of just opening fd2 from actually restored mount, we create a temporary bindmount which is lazy unmounted just after open making the file appear as a file on detached mount.&lt;br /&gt;
&lt;br /&gt;
Known problems with this approach:&lt;br /&gt;
&lt;br /&gt;
* Stat on btrfs gives wrong major/minor&lt;br /&gt;
* file handles does not work everywhere&lt;br /&gt;
* file handles can return fd2 on deleted file or on other hardlink, this needs special handling.&lt;br /&gt;
&lt;br /&gt;
Additionally (optional part):&lt;br /&gt;
We can export real major/minor in fdinfo (kernel).&lt;br /&gt;
We can think of new kernel interface to get mount's major/minor and root (shift from fsroot) for detached mounts, if we have it we don't need file handle hack to find file on other mount (see fsinfo or getvalues kernel patches in LKML, can we add this info there?).&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Tikhomirov &amp;lt;ptikhomirov@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suspended project ideas ==&lt;br /&gt;
&lt;br /&gt;
Listed here are tasks that seem suitable for GSoC, but currently do not have anybody to mentor it.&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
The io_uring Asynchronous I/O (AIO) framework is a new Linux I/O interface, first introduced in upstream Linux kernel version 5.1 (March 2019). It provides a low-latency and feature-rich interface for applications that require AIO functionality.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework&lt;br /&gt;
* https://github.com/axboe/liburing&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (+linux kernel)&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=5400</id>
		<title>Google Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=5400"/>
		<updated>2023-04-13T05:11:27Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* What are the requirements to be accepted for GSoC? */ - drop mailing list requirement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GSoC]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/ Google Summer of Code] (GSoC) is a program where Google pairs university students with open source organizations to work together over the summer. For their efforts, students are rewarded with stipends provided by Google. During the summer break students work on ideas for open-souce projects while mentors from the projects help them by providing support and code reviews.&lt;br /&gt;
&lt;br /&gt;
== What are the requirements to be accepted for GSoC? ==&lt;br /&gt;
Apart from the [https://developers.google.com/open-source/gsoc/faq#what_are_the_eligibility_requirements_for_participation official requirements] you will have to meet the following:&lt;br /&gt;
&lt;br /&gt;
* Successfully clone and compile CRIU&lt;br /&gt;
* Join the CRIU community in [https://gitter.im/save-restore/CRIU Gitter]&lt;br /&gt;
* Read [[GSoC Students Recommendations]]&lt;br /&gt;
* Have a small upstream contribution ([https://github.com/checkpoint-restore/criu/issues?q=is%3Aissue+is%3Aopen+label%3Agood-first-issue good first issues])&lt;br /&gt;
&lt;br /&gt;
== How can I have an upstream contribution? ==&lt;br /&gt;
As strange as it might look like, this is a proof that you have managed to clone and build your own CRIU, and subscribed to the list.&lt;br /&gt;
Don't worry, there are no requirements on the initial contribution when it comes to complexity or a size of the change.&lt;br /&gt;
Before working on a patch, please read  [[Installation]], [[How to submit patches]] and [https://github.com/checkpoint-restore/criu/blob/criu-dev/CONTRIBUTING.md Contributing guide]&lt;br /&gt;
&lt;br /&gt;
== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
The project ideas are listed in [[Google Summer of Code Ideas]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
Several projects successfully [[GSoC completed projects|graduated GSoC]] and they are now an integral part of CRIU&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5252</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5252"/>
		<updated>2022-02-26T09:23:04Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Support sparse ghosts ===&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
When criu dumps processes it also dumps files that are opened by them. It does this by saving file names by which the files are accessible. But sometimes files can have no names. It may happen if a task opened a file and then removed it. To dump this file criu cannot save its name (because the name doesn't exist). Instead criu saves the whole file. This is called &amp;quot;ghost file&amp;quot;. Since saving the whole file is very expensive (copying lots of data on disk) criu limits the maximum size of a ghost file. The latter is also not good, because there are &amp;quot;sparse&amp;quot; files, that are large in size, but may be small from the real disk usage perspective. The goal of the task is to support sparse ghost files, i.e. limit the size of the ghost not by its length but by disk usage and when copying the data detect the used blocks and save only those.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
 &lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sparse_file Sparse files]&lt;br /&gt;
*[[Dumping files]]&lt;br /&gt;
*[[Invisible files]]&lt;br /&gt;
*[https://www.kernel.org/doc/html/latest/filesystems/fiemap.html Fiemap ioctl]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for pidfd file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of pidfd descriptors&lt;br /&gt;
&lt;br /&gt;
There is pidfd_open syscall which allows opening&lt;br /&gt;
a special PID file descriptor. A user can send a signal to&lt;br /&gt;
the process (pidfd_send_signal syscall), wait for the process&lt;br /&gt;
(poll() on pidfd).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have pidfd's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/801319/&lt;br /&gt;
* https://lwn.net/Articles/794707/&lt;br /&gt;
* https://github.com/torvalds/linux/blob/v5.16/kernel/fork.c#L1877&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Christian Brauner &amp;lt;christian@brauner.io&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use eBPF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
* https://blog.zeyady.com/2021-08-16/gsoc-criu&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
The io_uring Asynchronous I/O (AIO) framework is a new Linux I/O interface, first introduced in upstream Linux kernel version 5.1 (March 2019). It provides a low-latency and feature-rich interface for applications that require AIO functionality.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework&lt;br /&gt;
* https://github.com/axboe/liburing&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (+linux kernel)&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CGroup-v2 support ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' cgroup is a mechanism to organize processes hierarchically and distribute system resources along the hierarchy in a controlled and configurable manner. cgroup v2 is a new version of the cgroup file system. Unlike v1, cgroup v2 has only single hierarchy. CRIU has to dump/restore a container cgroup hierarchy along with all per-cgroup options. The cgroupv2 support in CRIU has to be compatible with Docker, containerd and cri-o.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CGroups]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/252&lt;br /&gt;
* https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dump shmem in user-mode (unprivileged-mode) ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses /proc/pid/map_files to dump and restore anonymous shared memory regions, but map_files is restricted to the global CAP_SYS_ADMIN capability. In most cases, it is possible to dump/restore shared memory region without map_files and we need to implement this in CRIU.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[User-mode]]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;ovzxemul@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT]]&lt;br /&gt;
* Possible use case see LXD: https://github.com/lxc/lxd/blob/cb55b1c5a484a43e0c21c6ae8c4a2e30b4d45be3/lxd/migrate_container.go#L179&lt;br /&gt;
* https://github.com/lxc/lxd/pull/4072&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/blob/master/phaul/stats.go&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/pull/28&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suspended project ideas ==&lt;br /&gt;
&lt;br /&gt;
Listed here are tasks that seem suitable for GSoC, but currently do not have anybody to mentor it.&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt; / &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5243</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5243"/>
		<updated>2022-02-25T08:29:06Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Support sparse ghosts ===&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
When criu dumps processes it also dumps files that are opened by them. It does this by saving file names by which the files are accessible. But sometimes files can have no names. It may happen if a task opened a file and then removed it. To dump this file criu cannot save its name (because the name doesn't exist). Instead criu saves the whole file. This is called &amp;quot;ghost file&amp;quot;. Since saving the whole file is very expensive (copying lots of data on disk) criu limits the maximum size of a ghost file. The latter is also not good, because there are &amp;quot;sparse&amp;quot; files, that are large in size, but may be small from the real disk usage perspective. The goal of the task is to support sparse ghost files, i.e. limit the size of the ghost not by its length but by disk usage and when copying the data detect the used blocks and save only those.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
 &lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sparse_file Sparse files]&lt;br /&gt;
*[[Dumping files]]&lt;br /&gt;
*[[Invisible files]]&lt;br /&gt;
*[https://www.kernel.org/doc/html/latest/filesystems/fiemap.html Fiemap ioctl]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for pidfd file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of pidfd descriptors&lt;br /&gt;
&lt;br /&gt;
There is pidfd_open syscall which allows opening&lt;br /&gt;
a special PID file descriptor. A user can send a signal to&lt;br /&gt;
the process (pidfd_send_signal syscall), wait for the process&lt;br /&gt;
(poll() on pidfd).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have pidfd's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/801319/&lt;br /&gt;
* https://lwn.net/Articles/794707/&lt;br /&gt;
* https://github.com/torvalds/linux/blob/v5.16/kernel/fork.c#L1877&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Christian Brauner &amp;lt;christian@brauner.io&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use eBPF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
* https://blog.zeyady.com/2021-08-16/gsoc-criu&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
The io_uring Asynchronous I/O (AIO) framework is a new Linux I/O interface, first introduced in upstream Linux kernel version 5.1 (March 2019). It provides a low-latency and feature-rich interface for applications that require AIO functionality.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework&lt;br /&gt;
* https://github.com/axboe/liburing&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (+linux kernel)&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CGroup-v2 support ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' cgroup is a mechanism to organize processes hierarchically and distribute system resources along the hierarchy in a controlled and configurable manner. cgroup v2 is a new version of the cgroup file system. Unlike v1, cgroup v2 has only single hierarchy. CRIU has to dump/restore a container cgroup hierarchy along with all per-cgroup options. The cgroupv2 support in CRIU has to be compatible with Docker, containerd and cri-o.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CGroups]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/252&lt;br /&gt;
* https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dump shmem in user-mode (unprivileged-mode) ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses /proc/pid/map_files to dump and restore anonymous shared memory regions, but map_files is restricted to the global CAP_SYS_ADMIN capability. In most cases, it is possible to dump/restore shared memory region without map_files and we need to implement this in CRIU.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[User-mode]]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT]]&lt;br /&gt;
* Possible use case see LXD: https://github.com/lxc/lxd/blob/cb55b1c5a484a43e0c21c6ae8c4a2e30b4d45be3/lxd/migrate_container.go#L179&lt;br /&gt;
* https://github.com/lxc/lxd/pull/4072&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/blob/master/phaul/stats.go&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/pull/28&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suspended project ideas ==&lt;br /&gt;
&lt;br /&gt;
Listed here are tasks that seem suitable for GSoC, but currently do not have anybody to mentor it.&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt; / &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5242</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5242"/>
		<updated>2022-02-25T08:26:26Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Support sparse ghosts ===&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
When criu dumps processes it also dumps files that are opened by them. It does this by saving file names by which the files are accessible. But sometimes files can have no names. It may happen if a task opened a file and then removed it. To dump this file criu cannot save its name (because the name doesn't exist). Instead criu saves the whole file. This is called &amp;quot;ghost file&amp;quot;. Since saving the whole file is very expensive (copying lots of data on disk) criu limits the maximum size of a ghost file. The latter is also not good, because there are &amp;quot;sparse&amp;quot; files, that are large in size, but may be small from the real disk usage perspective. The goal of the task is to support sparse ghost files, i.e. limit the size of the ghost not by its length but by disk usage and when copying the data detect the used blocks and save only those.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
 &lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sparse_file Sparse files]&lt;br /&gt;
*[[Dumping files]]&lt;br /&gt;
*[[Invisible files]]&lt;br /&gt;
*[https://www.kernel.org/doc/html/latest/filesystems/fiemap.html Fiemap ioctl]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for pidfd file descriptors ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Support C/R of pidfd descriptors&lt;br /&gt;
&lt;br /&gt;
There is pidfd_open syscall which allows opening&lt;br /&gt;
a special PID file descriptor. A user can send a signal to&lt;br /&gt;
the process (pidfd_send_signal syscall), wait for the process&lt;br /&gt;
(poll() on pidfd).&lt;br /&gt;
&lt;br /&gt;
At the moment CRIU can't dump processes that have pidfd's opened.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://lwn.net/Articles/801319/&lt;br /&gt;
* https://lwn.net/Articles/794707/&lt;br /&gt;
* https://github.com/torvalds/linux/blob/v5.16/kernel/fork.c#L1877&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentors: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;, Christian Brauner &amp;lt;christian@brauner.io&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use eBPF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
* https://blog.zeyady.com/2021-08-16/gsoc-criu&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
The io_uring Asynchronous I/O (AIO) framework is a new Linux I/O interface, first introduced in upstream Linux kernel version 5.1 (March 2019). It provides a low-latency and feature-rich interface for applications that require AIO functionality.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework&lt;br /&gt;
* https://github.com/axboe/liburing&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert (+linux kernel)&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CGroup-v2 support ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' cgroup is a mechanism to organize processes hierarchically and distribute system resources along the hierarchy in a controlled and configurable manner. cgroup v2 is a new version of the cgroup file system. Unlike v1, cgroup v2 has only single hierarchy. CRIU has to dump/restore a container cgroup hierarchy along with all per-cgroup options. The cgroupv2 support in CRIU has to be compatible with Docker, containerd and cri-o.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CGroups]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/252&lt;br /&gt;
* https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dump shmem in user-mode (unprivileged-mode) ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses /proc/pid/map_files to dump and restore anonymous shared memory regions, but map_files is restricted to the global CAP_SYS_ADMIN capability. In most cases, it is possible to dump/restore shared memory region without map_files and we need to implement this in CRIU.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[User-mode]]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT]]&lt;br /&gt;
* Possible use case see LXD: https://github.com/lxc/lxd/blob/cb55b1c5a484a43e0c21c6ae8c4a2e30b4d45be3/lxd/migrate_container.go#L179&lt;br /&gt;
* https://github.com/lxc/lxd/pull/4072&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/blob/master/phaul/stats.go&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/pull/28&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Expected size: 350 hours&lt;br /&gt;
* Mentor: Radostin Stoyanov &amp;lt;rstoyanov@fedoraproject.org&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suspended project ideas ==&lt;br /&gt;
&lt;br /&gt;
Listed here are tasks that seem suitable for GSoC, but currently do not have anybody to mentor it.&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt; / &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC_completed_projects&amp;diff=5127</id>
		<title>GSoC completed projects</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC_completed_projects&amp;diff=5127"/>
		<updated>2021-02-09T16:24:01Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GSoC]]&lt;br /&gt;
&lt;br /&gt;
=== Restrict checks for open/mmaped files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Make sure the file opened (for fd or mapping) at restore is &amp;quot;the same&amp;quot; as it was on dump&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/criu/pull/1123&lt;br /&gt;
&lt;br /&gt;
CRIU doesn't carry files contents (except for ghost ones) into images. Thus on dump it saves some &amp;quot;meta&amp;quot; for file to validate it's &amp;quot;the same&amp;quot; on restore. Currently this meta includes only the file size. The task is to add some cookie value that's somehow affected by file's contents. This is primarily needed to reduce the possibility to restore with wrong libraries.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/Category:Files&lt;br /&gt;
* https://en.wikipedia.org/wiki/File_verification&lt;br /&gt;
&lt;br /&gt;
=== Optimize the pre-dump algorithm ===&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM&lt;br /&gt;
&lt;br /&gt;
'''Merged:''' https://github.com/checkpoint-restore/criu/commit/98608b90de0f853b1c8a6e15b312320e1441c359 &lt;br /&gt;
&lt;br /&gt;
Current [[CLI/cmd/pre-dump|pre-dump]] mode is used to write task memory contents into image&lt;br /&gt;
files w/o stopping the task for too long. It does this by stopping the task, infecting it and&lt;br /&gt;
draining all the memory into a set of pipes. Then the task is cured, resumed and the pipes'&lt;br /&gt;
contents is written into images (maybe a [[page server]]). Unfortunately, this approach creates&lt;br /&gt;
a big stress on the memory subsystem, as keeping all memory in pipes creates a lot of unreclaimable&lt;br /&gt;
memory (pages in pipes are not swappable), as well as the number of pipes themselves can be huge, as&lt;br /&gt;
one pipe doesn't store more than a fixed amount of data (see pipe(7) man page).&lt;br /&gt;
&lt;br /&gt;
A solution for this problem is to use a sys_read_process_vm() syscall, which will mitigate&lt;br /&gt;
all of the above. To do this we need to allocate a temporary buffer in criu, then walk the&lt;br /&gt;
target process vm by copying the memory piece-by-piece into it, then flush the data into image&lt;br /&gt;
(or page server), and repeat.&lt;br /&gt;
&lt;br /&gt;
Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as&lt;br /&gt;
the read_process_vm does, but vmsplices the data&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Memory pre dump]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/351&lt;br /&gt;
* [[Memory dumping and restoring]], [[Memory changes tracking]]&lt;br /&gt;
* [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2018/1/9/32 RFC for splice_process_vm syscall]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5125</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5125"/>
		<updated>2021-02-09T07:27:22Z</updated>

		<summary type="html">&lt;p&gt;Rppt: Remove uffd projects for now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT]]&lt;br /&gt;
* Possible use case see LXD: https://github.com/lxc/lxd/blob/cb55b1c5a484a43e0c21c6ae8c4a2e30b4d45be3/lxd/migrate_container.go#L179&lt;br /&gt;
* https://github.com/lxc/lxd/pull/4072&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/blob/master/phaul/stats.go&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use ePBF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt; / &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CGroup-v2 support ===&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dump shmem in user-mode ===&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5124</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=5124"/>
		<updated>2021-02-09T07:16:40Z</updated>

		<summary type="html">&lt;p&gt;Rppt: move &amp;quot;Restrict checks for open/mmaped files&amp;quot; to &amp;quot;GSoC completed projects&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
Please contact the respective mentor for the idea you are interested in. For general questions feel free to send an email to the [mailto:criu@openvz.org mailing list] or write in [https://gitter.im/save-restore/criu gitter].&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Post-copy for shared memory and hugetlbfs ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' extend post-copy memory restore and migration to support shared memory and hugetlbfs.&lt;br /&gt;
&lt;br /&gt;
CRIU relies on [[Userfaultfd]] mechanism in the Linux kernel to implement the demand paging in userspace and allow post-copy memory (or lazy) [[Lazy_migration|migration]]. However, currently this support is limited to anonymous private memory mappings, although kernel also supports shared memory areas and hugetlbfs backed memory.&lt;br /&gt;
&lt;br /&gt;
The shared memory support for lazy migration can be added to CRIU without kernel modifications, while proper handling of hugetlbfs would require userfaultfd callbacks for [http://man7.org/linux/man-pages/man2/fallocate.2.html fallocate(PUNCH_HOLE)] and [http://man7.org/linux/man-pages/man2/madvise.2.html madvise(MADV_REMOVE)] system calls.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html hugetlbfs]&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Mentor: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Anonymize image files]]&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT]]&lt;br /&gt;
* Possible use case see LXD: https://github.com/lxc/lxd/blob/cb55b1c5a484a43e0c21c6ae8c4a2e30b4d45be3/lxd/migrate_container.go#L179&lt;br /&gt;
* https://github.com/lxc/lxd/pull/4072&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/blob/master/phaul/stats.go&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory changes tracking with userfaultfd-WP ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' add ability to track memory changes of the snapshotted processes using userfaultfd-WP&lt;br /&gt;
&lt;br /&gt;
Currently CRIU uses [[Memory_changes_tracking|Soft-dirty]] mechanism in Linux kernel to track memory changes.&lt;br /&gt;
This mechanism can be complemented (or even completely replaced) with recently proposed write protection support for&lt;br /&gt;
userfaultfd (userfaultfd-WP).&lt;br /&gt;
&lt;br /&gt;
Userfault allows implementation of paging in userspace. It allows an application to receive notifications about page faults and provide the desired memory contents for the faulting pages. In the current upstream kernels only missing page faults are supported, but there is an ongoing work to allow notifications for write faults as well. Using such notifications it would be possible to precisely track memory changes during pre-dump iterations. This approach may prove to be more efficient than soft-dirty.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://github.com/xzpeter/linux/tree/uffd-wp-merged Userfaultfd-WP]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/soft-dirty.html?highlight=soft%20dirty Soft-Dirty]&lt;br /&gt;
* https://lwn.net/Articles/777258/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Use eBPF to lock and unlock the network ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Use ePBF instead of external iptables-restore tool for network lock and unlock.&lt;br /&gt;
&lt;br /&gt;
During checkpointing and restoring CRIU locks the network to make sure no network packets are accepted by the network stack during the time the process is checkpointed. Currently CRIU calls out to iptables-restore to create and delete the corresponding iptables rules. Another approach which avoids calling out to the external binary iptables-restore would be to directly inject eBPF rules. There have been reports from users that iptables-restore fails in some way and eBPF could avoid this external dependency.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/TCP_connection#Checkpoint_and_restore_TCP_connection&lt;br /&gt;
* https://github.com/systemd/systemd/blob/master/src/core/bpf-firewall.c&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for SPFS ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' The SPFS is a special filesystem that allows checkpoint and restore of such things as NFS and FUSE&lt;br /&gt;
&lt;br /&gt;
NFS support is already implemented in Virtuozzo CRIU, but it's very beneficial to port it to mainline CRIU. The importaint part of it is the need to implement the integration of Stub-Proxy File System (SPFS) with LXC/yet_another_containers_environment.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/60&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/53&lt;br /&gt;
* https://github.com/skinsbursky/spfs&lt;br /&gt;
* https://patchwork.criu.org/series/137/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Alexander Mikhalitsyn &amp;lt;alexander@mihalicyn.com&amp;gt; / &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Alexander Mikhalitsyn &amp;lt;alexander.mikhalitsyn@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IOUring support ===&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CGroup-v2 support ===&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dump shmem in user-mode ===&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=5123</id>
		<title>Google Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=5123"/>
		<updated>2021-02-09T07:15:35Z</updated>

		<summary type="html">&lt;p&gt;Rppt: Add link to CONTRIBUTING.md&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GSoC]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/ Google Summer of Code] (GSoC) is a program where Google pairs university students with open source organizations to work together over the summer. For their efforts, students are rewarded with stipends provided by Google. During the summer break students work on ideas for open-souce projects while mentors from the projects help them by providing support and code reviews.&lt;br /&gt;
&lt;br /&gt;
== What are the requirements to be accepted for GSoC? ==&lt;br /&gt;
Apart from the [https://developers.google.com/open-source/gsoc/faq#what_are_the_eligibility_requirements_for_participation official requirements] you will have to meet the following:&lt;br /&gt;
&lt;br /&gt;
* Successfully clone and compile CRIU&lt;br /&gt;
* Subscribe to the [https://openvz.org/mailman/listinfo/criu mailing list]&lt;br /&gt;
* Have a small upstream contribution&lt;br /&gt;
&lt;br /&gt;
== How can I have an upstream contribution? ==&lt;br /&gt;
As strange as it might look like, this is a proof that you have managed to clone and build your own CRIU, and subscribed to the list.&lt;br /&gt;
Don't worry, there are no requirements on the initial contribution when it comes to complexity or a size of the change.&lt;br /&gt;
Before working on a patch, please read  [[Installation]], [[How to submit patches]] and [https://github.com/checkpoint-restore/criu/blob/criu-dev/CONTRIBUTING.md Contributing guide]&lt;br /&gt;
&lt;br /&gt;
== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
The project ideas are listed in [[Google Summer of Code Ideas]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
Several projects successfully [[GSoC completed projects|graduated GSoC]] and they are now an integral part of CRIU&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=5122</id>
		<title>Google Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=5122"/>
		<updated>2021-02-09T07:12:27Z</updated>

		<summary type="html">&lt;p&gt;Rppt: Add &amp;quot;Completed projects&amp;quot; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GSoC]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/ Google Summer of Code] (GSoC) is a program where Google pairs university students with open source organizations to work together over the summer. For their efforts, students are rewarded with stipends provided by Google. During the summer break students work on ideas for open-souce projects while mentors from the projects help them by providing support and code reviews.&lt;br /&gt;
&lt;br /&gt;
== What are the requirements to be accepted for GSoC? ==&lt;br /&gt;
Apart from the [https://developers.google.com/open-source/gsoc/faq#what_are_the_eligibility_requirements_for_participation official requirements] you will have to meet the following:&lt;br /&gt;
&lt;br /&gt;
* Successfully clone and compile CRIU&lt;br /&gt;
* Subscribe to the [https://openvz.org/mailman/listinfo/criu mailing list]&lt;br /&gt;
* Have a small upstream contribution&lt;br /&gt;
&lt;br /&gt;
== How can I have an upstream contribution? ==&lt;br /&gt;
As strange as it might look like, this is a proof that you have managed to clone and build your own CRIU, and subscribed to the list.&lt;br /&gt;
Don't worry, there are no requirements on the initial contribution when it comes to complexity or a size of the change.&lt;br /&gt;
Before working on a patch, please read [[How to submit patches]] and [[Installation]].&lt;br /&gt;
&lt;br /&gt;
== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
The project ideas are listed in [[Google Summer of Code Ideas]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
Several projects successfully [[GSoC completed projects|graduated GSoC]] and they are now an integral part of CRIU&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC_completed_projects&amp;diff=5121</id>
		<title>GSoC completed projects</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC_completed_projects&amp;diff=5121"/>
		<updated>2021-02-09T07:11:56Z</updated>

		<summary type="html">&lt;p&gt;Rppt: Created page with &amp;quot;Category:GSoC  === Restrict checks for open/mmaped files ===   '''Summary:''' Make sure the file opened (for fd or mapping) at restore is &amp;quot;the same&amp;quot; as it was on dump  '''...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GSoC]]&lt;br /&gt;
&lt;br /&gt;
=== Restrict checks for open/mmaped files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Make sure the file opened (for fd or mapping) at restore is &amp;quot;the same&amp;quot; as it was on dump&lt;br /&gt;
&lt;br /&gt;
'''Merged PR:''' https://github.com/checkpoint-restore/criu/pull/1123&lt;br /&gt;
&lt;br /&gt;
CRIU doesn't carry files contents (except for ghost ones) into images. Thus on dump it saves some &amp;quot;meta&amp;quot; for file to validate it's &amp;quot;the same&amp;quot; on restore. Currently this meta includes only the file size. The task is to add some cookie value that's somehow affected by file's contents. This is primarily needed to reduce the possibility to restore with wrong libraries.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://www.criu.org/Category:Files&lt;br /&gt;
* https://en.wikipedia.org/wiki/File_verification&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=5089</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=5089"/>
		<updated>2020-08-26T06:11:35Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Linux Plumbers Conference 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Linux Plumbers Conference 2020 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 24-28, [https://linuxplumbersconf.org/event/7/ online on the wider Internet]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/641/ Fast checkpointing with criu-image-streamer]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/642/ FastFreeze: Unprivileged checkpoint/restore for containerized applications]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/640/ CRIU mounts migration: problems and solutions]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/643/ Checkpoint-restoring containers with Docker inside]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Phoronix news ==&lt;br /&gt;
[[Image:phoronix.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 4, 2020, online'''&lt;br /&gt;
&lt;br /&gt;
[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Linux-5.9-Checkpoint-Restore Checkpoint/Restore Of Unprivileged Processes Sent In For Linux 5.9]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FOSDEM 2020 ==&lt;br /&gt;
[[Image:Fosdem.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Feburary 1, 2020, Brussels, Belgium'''&lt;br /&gt;
&lt;br /&gt;
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Rppt]] 19:22, 28 February 2020‎ (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2019 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''September 9-11, Lisbon, Portugal'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2019 ==&lt;br /&gt;
[[Image:gsoc.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Mar-Sep 2019'''&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) &lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=5088</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=5088"/>
		<updated>2020-08-25T19:20:16Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Linux Plumbers Conference 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Linux Plumbers Conference 2020 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 24-28, online at https://linuxplumbersconf.org/event/7/page/100-watch-live-free'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/641/ Fast checkpointing with criu-image-streamer]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/642/ FastFreeze: Unprivileged checkpoint/restore for containerized applications]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/640/ CRIU mounts migration: problems and solutions]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/643/ Checkpoint-restoring containers with Docker inside]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Phoronix news ==&lt;br /&gt;
[[Image:phoronix.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 4, 2020, online'''&lt;br /&gt;
&lt;br /&gt;
[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Linux-5.9-Checkpoint-Restore Checkpoint/Restore Of Unprivileged Processes Sent In For Linux 5.9]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FOSDEM 2020 ==&lt;br /&gt;
[[Image:Fosdem.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Feburary 1, 2020, Brussels, Belgium'''&lt;br /&gt;
&lt;br /&gt;
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Rppt]] 19:22, 28 February 2020‎ (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2019 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''September 9-11, Lisbon, Portugal'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2019 ==&lt;br /&gt;
[[Image:gsoc.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Mar-Sep 2019'''&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) &lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=5087</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=5087"/>
		<updated>2020-08-25T19:19:54Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Linux Plumbers Conference 2020 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 24-28, online at hhttps://linuxplumbersconf.org/event/7/page/100-watch-live-free'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/641/ Fast checkpointing with criu-image-streamer]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/642/ FastFreeze: Unprivileged checkpoint/restore for containerized applications]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/640/ CRIU mounts migration: problems and solutions]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/7/contributions/643/ Checkpoint-restoring containers with Docker inside]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Phoronix news ==&lt;br /&gt;
[[Image:phoronix.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 4, 2020, online'''&lt;br /&gt;
&lt;br /&gt;
[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Linux-5.9-Checkpoint-Restore Checkpoint/Restore Of Unprivileged Processes Sent In For Linux 5.9]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FOSDEM 2020 ==&lt;br /&gt;
[[Image:Fosdem.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Feburary 1, 2020, Brussels, Belgium'''&lt;br /&gt;
&lt;br /&gt;
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Rppt]] 19:22, 28 February 2020‎ (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2019 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''September 9-11, Lisbon, Portugal'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2019 ==&lt;br /&gt;
[[Image:gsoc.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Mar-Sep 2019'''&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) &lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=5077</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=5077"/>
		<updated>2020-08-05T16:27:27Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Phoronix news ==&lt;br /&gt;
[[Image:phoronix.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''August 4, 2020, online'''&lt;br /&gt;
&lt;br /&gt;
[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Linux-5.9-Checkpoint-Restore Checkpoint/Restore Of Unprivileged Processes Sent In For Linux 5.9]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FOSDEM 2020 ==&lt;br /&gt;
[[Image:Fosdem.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Feburary 1, 2020, Brussels, Belgium'''&lt;br /&gt;
&lt;br /&gt;
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Rppt]] 19:22, 28 February 2020‎ (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2019 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''September 9-11, Lisbon, Portugal'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2019 ==&lt;br /&gt;
[[Image:gsoc.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Mar-Sep 2019'''&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) &lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=File:Phoronix.png&amp;diff=5076</id>
		<title>File:Phoronix.png</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=File:Phoronix.png&amp;diff=5076"/>
		<updated>2020-08-05T16:27:11Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=How_to_submit_patches&amp;diff=5037</id>
		<title>How to submit patches</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=How_to_submit_patches&amp;diff=5037"/>
		<updated>2020-03-17T10:27:20Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Set up working environment ==&lt;br /&gt;
&lt;br /&gt;
Although criu could be run as non-root (see [[Security]]), development is better to be done as root. For example, some tests require root. So, it would be a good idea to set up some recent Linux distro on a virtual machine.&lt;br /&gt;
&lt;br /&gt;
== Get the source code ==&lt;br /&gt;
&lt;br /&gt;
The CRIU sources are tracked by Git. Official CRIU repo is at [https://github.com/checkpoint-restore/criu https://github.com/checkpoint-restore/criu].&lt;br /&gt;
&lt;br /&gt;
The repository may contain multiple branches. Development happens in the '''criu-dev''' branch.&lt;br /&gt;
&lt;br /&gt;
To clone CRIU repo and switch to the proper branch, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        git clone https://github.com/checkpoint-restore/criu criu&lt;br /&gt;
        cd criu&lt;br /&gt;
        git checkout criu-dev&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compile ==&lt;br /&gt;
&lt;br /&gt;
First, you need to install compile-time dependencies. Check [[Installation#Dependencies]] for more info.&lt;br /&gt;
&lt;br /&gt;
To compile CRIU, run:&lt;br /&gt;
&lt;br /&gt;
        make&lt;br /&gt;
&lt;br /&gt;
This should create the &amp;lt;code&amp;gt;./criu/criu&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
&lt;br /&gt;
== Edit the source code ==&lt;br /&gt;
&lt;br /&gt;
If you use ctags, you can generate the ctags file by running&lt;br /&gt;
&lt;br /&gt;
        make tags&lt;br /&gt;
&lt;br /&gt;
When you change the source code, please keep in mind the following code conventions:&lt;br /&gt;
&lt;br /&gt;
* we prefer tabs and indentations to be 8 characters width&lt;br /&gt;
* CRIU mostly follows [https://www.kernel.org/doc/Documentation/process/coding-style.rst Linux kernel coding style], but we are less strict than the kernel community.&lt;br /&gt;
&lt;br /&gt;
Other conventions can be learned from the source code itself. In short, make sure your new code&lt;br /&gt;
looks similar to what is already there.&lt;br /&gt;
&lt;br /&gt;
== Test your changes ==&lt;br /&gt;
&lt;br /&gt;
CRIU comes with an extensive test suite. To check whether your changes introduce any regressions, run&lt;br /&gt;
&lt;br /&gt;
         make test&lt;br /&gt;
&lt;br /&gt;
The command runs [[ZDTM Test Suite]]. Check for any error messages produced by it.&lt;br /&gt;
&lt;br /&gt;
In case you'd rather have someone else run the tests, you can use travis-ci for your&lt;br /&gt;
own github fork of CRIU. It will check the compilation for various supported platforms,&lt;br /&gt;
as well as run most of the tests from the suite. See https://travis-ci.org/checkpoint-restore/criu&lt;br /&gt;
for more details.&lt;br /&gt;
&lt;br /&gt;
== Sign your work ==&lt;br /&gt;
&lt;br /&gt;
To improve tracking of who did what, we ask you to sign off the patches&lt;br /&gt;
that are to be emailed.&lt;br /&gt;
&lt;br /&gt;
The sign-off is a simple line at the end of the explanation for the&lt;br /&gt;
patch, which certifies that you wrote it or otherwise have the right to&lt;br /&gt;
pass it on as an open-source patch.  The rules are pretty simple: if you&lt;br /&gt;
can certify the below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 46em;&amp;quot;&amp;gt;&lt;br /&gt;
'''Developer's Certificate of Origin 1.1'''&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
    By making a contribution to this project, I certify that:&lt;br /&gt;
    &lt;br /&gt;
    (a) The contribution was created in whole or in part by me and I&lt;br /&gt;
        have the right to submit it under the open source license&lt;br /&gt;
        indicated in the file; or&lt;br /&gt;
    &lt;br /&gt;
    (b) The contribution is based upon previous work that, to the best&lt;br /&gt;
        of my knowledge, is covered under an appropriate open source&lt;br /&gt;
        license and I have the right under that license to submit that&lt;br /&gt;
        work with modifications, whether created in whole or in part&lt;br /&gt;
        by me, under the same open source license (unless I am&lt;br /&gt;
        permitted to submit under a different license), as indicated&lt;br /&gt;
        in the file; or&lt;br /&gt;
    &lt;br /&gt;
    (c) The contribution was provided directly to me by some other&lt;br /&gt;
        person who certified (a), (b) or (c) and I have not modified&lt;br /&gt;
        it.&lt;br /&gt;
    &lt;br /&gt;
    (d) I understand and agree that this project and the contribution&lt;br /&gt;
        are public and that a record of the contribution (including all&lt;br /&gt;
        personal information I submit with it, including my sign-off) is&lt;br /&gt;
        maintained indefinitely and may be redistributed consistent with&lt;br /&gt;
        this project or the open source license(s) involved.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
then you just add a line saying&lt;br /&gt;
&lt;br /&gt;
        Signed-off-by: Random J Developer &amp;lt;random at developer.example.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using your real name (please, no pseudonyms or anonymous contributions if&lt;br /&gt;
it possible).&lt;br /&gt;
&lt;br /&gt;
Hint: you can use &amp;lt;code&amp;gt;git commit -s&amp;lt;/code&amp;gt; to add Signed-off-by line to your&lt;br /&gt;
commit message. To append such line to a commit you already made, use&lt;br /&gt;
&amp;lt;code&amp;gt;git commit --amend -s&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 46em;&amp;quot;&amp;gt;&lt;br /&gt;
'''Example patch message'''&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 From: Random J Developer &amp;lt;random at developer.example.org&amp;gt;&lt;br /&gt;
 Subject: [PATCH] Short patch description&lt;br /&gt;
 &lt;br /&gt;
 Long patch description (could be skipped if patch&lt;br /&gt;
 is trivial enough)&lt;br /&gt;
 &lt;br /&gt;
 Signed-off-by: Random J Developer &amp;lt;random at developer.example.org&amp;gt;&lt;br /&gt;
 ---&lt;br /&gt;
 Patch body here&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submit your work upstream ==&lt;br /&gt;
&lt;br /&gt;
We accept github pull requests and this is the preferred way to contribute to CRIU. &lt;br /&gt;
For that you should push your work to your fork of CRIU at [https://github.com GitHub] and create a [https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests pull request]&lt;br /&gt;
&lt;br /&gt;
Historically, CRIU worked with mailing lists and patches so if you still prefer this way continue reading till the end of this section.&lt;br /&gt;
&lt;br /&gt;
=== Make a patch ===&lt;br /&gt;
&lt;br /&gt;
To create a patch, run&lt;br /&gt;
&lt;br /&gt;
    git format-patch --signoff origin/criu-dev&lt;br /&gt;
&lt;br /&gt;
You might need to read GIT documentation on how to prepare patches&lt;br /&gt;
for mail submission. Take a look at http://book.git-scm.com/ and/or&lt;br /&gt;
http://git-scm.com/documentation for details. It should not be hard&lt;br /&gt;
at all.&lt;br /&gt;
&lt;br /&gt;
We recommend to post patches using &amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
  git send-email --cover-letter --no-chain-reply-to --annotate \&lt;br /&gt;
                 --confirm=always --to=criu@openvz.org criu-dev&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt; subcommand may not be in&lt;br /&gt;
the main git package and using it may require installation of a&lt;br /&gt;
separate package, for example the &amp;quot;git-email&amp;quot; package in Fedora and&lt;br /&gt;
Debian.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using git send-email, you might need to&lt;br /&gt;
configure it to point it to your SMTP server with something like:&lt;br /&gt;
&lt;br /&gt;
    git config --global sendemail.smtpServer stmp.example.net&lt;br /&gt;
&lt;br /&gt;
If you get tired of typing &amp;lt;code&amp;gt;--to=criu@openvz.org&amp;lt;/code&amp;gt; all the time,&lt;br /&gt;
you can configure that to be automatically handled as well:&lt;br /&gt;
&lt;br /&gt;
    git config sendemail.to criu@openvz.org&lt;br /&gt;
&lt;br /&gt;
If a developer is sending another version of the patch (e.g. to address&lt;br /&gt;
review comments), they are advised to note differences to previous versions&lt;br /&gt;
after the &amp;lt;code&amp;gt;---&amp;lt;/code&amp;gt; line in the patch so that it helps reviewers but&lt;br /&gt;
doesn't become part of git history. Moreover, such patch needs to be prefixed&lt;br /&gt;
correctly with &amp;lt;code&amp;gt;--subject-prefix=PATCHv2&amp;lt;/code&amp;gt; appended to&lt;br /&gt;
&amp;lt;code&amp;gt;git send-email&amp;lt;/code&amp;gt; (substitute &amp;lt;code&amp;gt;v2&amp;lt;/code&amp;gt; with the correct&lt;br /&gt;
version if needed though).&lt;br /&gt;
&lt;br /&gt;
=== Mail patches ===&lt;br /&gt;
&lt;br /&gt;
The patches should be sent to CRIU development mailing list, &amp;lt;code&amp;gt;criu AT openvz.org&amp;lt;/code&amp;gt;. Note that you need to be subscribed first in order to post. The list web interface is available at https://openvz.org/mailman/listinfo/criu; you can also use standard mailman aliases to work with it.&lt;br /&gt;
&lt;br /&gt;
Please make sure the email client you're using doesn't screw your patch (line wrapping and so on).&lt;br /&gt;
&lt;br /&gt;
{{Note| When sending a patch set that consists of more than one patch, please, push your changes in your local repo and provide the URL of the branch in the cover-letter}}&lt;br /&gt;
&lt;br /&gt;
=== Wait for response ===&lt;br /&gt;
&lt;br /&gt;
Be patient. Most CRIU developers are pretty busy people so if&lt;br /&gt;
there is no immediate response on your patch — don't be surprised,&lt;br /&gt;
sometimes a patch may fly around a week before it gets reviewed.&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Continuous integration]]''&lt;br /&gt;
&lt;br /&gt;
CRIU tests are run for each series sent to the mailing list. If you get a message from our patchwork that patches failed to pass the tests, you have to investigate what is wrong.&lt;br /&gt;
&lt;br /&gt;
We also recommend you to [[Continuous integration#Enable Travis CI for your repo|enable Travis CI for your repo]] to check patches in your git branch, before sending them to the mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC20_Students_Requests&amp;diff=5026</id>
		<title>GSoC20 Students Requests</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC20_Students_Requests&amp;diff=5026"/>
		<updated>2020-03-04T06:14:41Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
# Manas Mangaonkar&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Porting_crit_functionalities_in_GO|Porting crit functionalities in GO]]&lt;br /&gt;
# Anmol&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Anonymise_image_files|Anonymise image files]]&lt;br /&gt;
# Aashim Garg&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Restrict_checks_for_open.2Fmmaped_files|Restrict checks for open/mmaped files]]&lt;br /&gt;
# Zeyad Yasser&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Anonymise_image_files|Anonymise image files]]&lt;br /&gt;
# Kaushlendra Pratap&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Anonymise_image_files|Anonymise image files]]&lt;br /&gt;
# Adhitya Mahajan&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Restrict_checks_for_open.2Fmmaped_files|Restrict checks for open/mmaped files]]&lt;br /&gt;
# Nishchay Agrawal&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Use_eBPF_to_lock_and_unlock_the_network|Use eBPF to lock and unlock the network]]&lt;br /&gt;
# Shivamani Patil&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Porting_crit_functionalities_in_GO|Porting crit functionalities in GO]]&lt;br /&gt;
# Yannis Thomopoulos&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Add_support_for_SPFS|Add support for SPFS]]&lt;br /&gt;
# Sahil Kumar Sahu&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Use_eBPF_to_lock_and_unlock_the_network|Use eBPF to lock and unlock the network]]&lt;br /&gt;
# Puranjay Mohan&lt;br /&gt;
#* Subproject: Optomize logging engine&lt;br /&gt;
# Ajay Bharadwa&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Restrict_checks_for_open.2Fmmaped_files|Restrict checks for open/mmaped files]]&lt;br /&gt;
# Subham Pandey&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Memory_changes_tracking_with_userfaultfd-WP|Memory changes tracker]]&lt;br /&gt;
# Vineet Jain&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Use_eBPF_to_lock_and_unlock_the_network|Use eBPF to lock and unlock the network]] or [[Google_Summer_of_Code_Ideas#Restrict_checks_for_open.2Fmmaped_files|Restrict checks for open/mmaped files]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC20_Students_Requests&amp;diff=5018</id>
		<title>GSoC20 Students Requests</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC20_Students_Requests&amp;diff=5018"/>
		<updated>2020-02-28T21:23:37Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
# Manas Mangaonkar&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Porting_crit_functionalities_in_GO|Porting crit functionalities in GO]]&lt;br /&gt;
# Anmol&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Anonymise_image_files|Anonymise image files]]&lt;br /&gt;
# Aashim Garg&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Restrict_checks_for_open.2Fmmaped_files|Restrict checks for open/mmaped files]]&lt;br /&gt;
# Zeyad Yasser&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Anonymise_image_files|Anonymise image files]]&lt;br /&gt;
# Kaushlendra Pratap&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Anonymise_image_files|Anonymise image files]]&lt;br /&gt;
# Adhitya Mahajan&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Restrict_checks_for_open.2Fmmaped_files|Restrict checks for open/mmaped files]]&lt;br /&gt;
# Nishchay Agrawal&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Use_eBPF_to_lock_and_unlock_the_network|Use eBPF to lock and unlock the network]]&lt;br /&gt;
# Shivamani Patil&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Porting_crit_functionalities_in_GO|Porting crit functionalities in GO]]&lt;br /&gt;
# Yannis Thomopoulos&lt;br /&gt;
#* Subproject: [[Google_Summer_of_Code_Ideas#Add_support_for_SPFS|Add support for SPFS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=5017</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=5017"/>
		<updated>2020-02-28T21:22:22Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== FOSDEM 2020 ==&lt;br /&gt;
[[Image:Fosdem.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Feburary 1, 2020, Brussels, Belgium'''&lt;br /&gt;
&lt;br /&gt;
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2019 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''September 9-11, Lisbon, Portugal'''&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]&lt;br /&gt;
&lt;br /&gt;
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2019 ==&lt;br /&gt;
[[Image:gsoc.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Mar-Sep 2019'''&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]&lt;br /&gt;
&lt;br /&gt;
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Userfaultfd&amp;diff=4983</id>
		<title>Userfaultfd</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Userfaultfd&amp;diff=4983"/>
		<updated>2019-10-24T04:39:26Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes usage of userfaultfd for lazy restore and lazy migration in CRIU.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The [http://man7.org/linux/man-pages/man2/userfaultfd.2.html userfaultfd] mechanism is designed to allow user-space paging. Its initial implementation merged in Linux 4.3 was designed for KVM/QEMU use-case and lacked some functionality necessary for CRIU. In Linux 4.11 the userfaultfd was extended with so-called &amp;quot;non-cooperative&amp;quot; mode, that allows, at least in theory, lazy (or post-copy) restore in CRIU.&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;restore&amp;lt;/code&amp;gt; action accepts yet another API switch: option &amp;lt;code&amp;gt;--lazy-pages&amp;lt;/code&amp;gt;. In this mode, &amp;lt;code&amp;gt;restore&amp;lt;/code&amp;gt; skips injection of lazy pages into the processes address space, but rather registers lazy memory areas with userfaultfd.&lt;br /&gt;
* The lazy pages are completely handled by dedicated &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon. The daemon receives userfault file descriptors from &amp;lt;code&amp;gt;restore&amp;lt;/code&amp;gt; via UNIX socket. The userfault file descriptors allow reception of page-fault and other events and resolution of these events by the daemon.&lt;br /&gt;
* For the migration case, the &amp;lt;code&amp;gt;dump&amp;lt;/code&amp;gt; action also accepts API switch: option &amp;lt;code&amp;gt;--lazy-pages&amp;lt;/code&amp;gt;. When this option is used, the &amp;lt;code&amp;gt;dump&amp;lt;/code&amp;gt; keeps the memory pages and allows the &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon to request these pages via TCP connection.&lt;br /&gt;
&lt;br /&gt;
[[File:Criu-memory-wflow.png]]&lt;br /&gt;
&lt;br /&gt;
=== Daemon ===&lt;br /&gt;
&lt;br /&gt;
Tasks after restore have lazy VMAs registered with userfaultfd, the fd itself is sent before resume to &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon and closed. The daemon monitors the UFFD events and repopulates the tasks address space. The &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon can get pages either from images (both local and remote) or directly from the remote side &amp;lt;code&amp;gt;dump&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the restored task accesses a missing memory page, it causes a page fault. The &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon receives the page fault notification and resolves it by populating the faulting task memory. If there were no page faults for some time, the daemon copies the task's remaining memory pages in the background.&lt;br /&gt;
&lt;br /&gt;
==== Local images ====&lt;br /&gt;
&lt;br /&gt;
The daemon uses local page-read engine to read pages from images.&lt;br /&gt;
&lt;br /&gt;
==== Remote images ====&lt;br /&gt;
&lt;br /&gt;
* The [[page server]] is run on the remote side with &amp;lt;code&amp;gt;--lazy-pages&amp;lt;/code&amp;gt; option.&lt;br /&gt;
* The lazy-pages daemon connects to the remote [[page server]] with &amp;lt;code&amp;gt;--page-server&amp;lt;/code&amp;gt; option. The &amp;lt;code&amp;gt;--address&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--port&amp;lt;/code&amp;gt; options allow setting of IP address and port of the listening [[page server]].&lt;br /&gt;
* Current protocol allows the lazy-pages daemon to request several continuous pages.&lt;br /&gt;
&lt;br /&gt;
==== Migration ====&lt;br /&gt;
* The &amp;lt;code&amp;gt;dump&amp;lt;/code&amp;gt; collects the pages into pipes and starts the [[page server]] in a mode that allows &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon to connect to it and request the memory pages&lt;br /&gt;
* When the restored task accesses a missing memory page, the &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon request the page from the [[page server]] running on the dump side&lt;br /&gt;
* After the page is received, the &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon injects it into the task's address space using userfautlfd&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
* Currently only MAP_PRIVATE | MAP_ANONYMOUS is supported. Newer kernels (4.11+) allow userfaultfd for hugetlbfs and shared memory, yet to be implemented in CRIU.&lt;br /&gt;
* Userfault is known not to map one page into two places. Thus -- COW-ed pages will get COW-ed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Disk-less migration]]&lt;br /&gt;
* [[Lazy migration]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Memory]]&lt;br /&gt;
[[Category:New features]]&lt;br /&gt;
[[Category:Under the hood]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC19_Students_Requests&amp;diff=4859</id>
		<title>GSoC19 Students Requests</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC19_Students_Requests&amp;diff=4859"/>
		<updated>2019-03-18T19:06:11Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#&lt;br /&gt;
#* James Cui&lt;br /&gt;
#** Subproject: CRIT to Go&lt;br /&gt;
#&lt;br /&gt;
#* Anand Kumar Singh&lt;br /&gt;
#** Subproject: -&lt;br /&gt;
#&lt;br /&gt;
#* Harshavardhan Unnibhavi&lt;br /&gt;
#** Subproject: Optimize pre-dump algo&lt;br /&gt;
#&lt;br /&gt;
#* Subham Kumar&lt;br /&gt;
#** Subproject: Anonymize image files&lt;br /&gt;
#&lt;br /&gt;
#* Vaibhav Gupta&lt;br /&gt;
#** Subproject: Optimize logging engine&lt;br /&gt;
#&lt;br /&gt;
#* Anastasia Markina&lt;br /&gt;
#** Subproject: Optimize logging engine&lt;br /&gt;
#** Subproject: Anonymize image files&lt;br /&gt;
#&lt;br /&gt;
#* Abishek Dubey&lt;br /&gt;
#** Subproject: Optimize pre-dump or anon images&lt;br /&gt;
#** Subproject: Postcopy for shared memory and hugetlbfs&lt;br /&gt;
#&lt;br /&gt;
#* Nikhil Ramakrishan&lt;br /&gt;
#** Subproject: Anonymize image files&lt;br /&gt;
#&lt;br /&gt;
#* Sukrit Bhatnagar&lt;br /&gt;
#** Subproject: Postcopy for shared memory and hugetlbfs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=4857</id>
		<title>Google Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code&amp;diff=4857"/>
		<updated>2019-03-18T05:40:36Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GSoC]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
[https://summerofcode.withgoogle.com/ Google Summer of Code] (GSoC) is a program where Google pairs university students with open source organizations to work together over the summer. For their efforts, students are rewarded with stipends provided by Google. During the summer break students work on ideas for open-souce projects while mentors from the projects help them by providing support and code reviews.&lt;br /&gt;
&lt;br /&gt;
== What are the requirements to be accepted for GSoC? ==&lt;br /&gt;
Apart from the [https://developers.google.com/open-source/gsoc/faq#what_are_the_eligibility_requirements_for_participation official requirements] you will have to meet the following:&lt;br /&gt;
&lt;br /&gt;
* Successfully clone and compile CRIU&lt;br /&gt;
* Subscribe to the [https://openvz.org/mailman/listinfo/criu mailing list]&lt;br /&gt;
* Have a small upstream contribution&lt;br /&gt;
&lt;br /&gt;
== How can I have an upstream contribution? ==&lt;br /&gt;
As strange as it might look like, this is a proof that you have managed to clone and build your own CRIU, and subscribed to the list.&lt;br /&gt;
Don't worry, there are no requirements on the initial contribution when it comes to complexity or a size of the change.&lt;br /&gt;
Before working on a patch, please read [[How to submit patches]] and [[Installation]].&lt;br /&gt;
&lt;br /&gt;
== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
The project ideas are listed in [[Google Summer of Code Ideas]].&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=GSoC19_Students_Requests&amp;diff=4856</id>
		<title>GSoC19 Students Requests</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=GSoC19_Students_Requests&amp;diff=4856"/>
		<updated>2019-03-14T13:17:44Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#&lt;br /&gt;
#* James Cui&lt;br /&gt;
#** Subproject: CRIT to Go&lt;br /&gt;
#&lt;br /&gt;
#* Anand Kumar Singh&lt;br /&gt;
#** Subproject: -&lt;br /&gt;
#&lt;br /&gt;
#* Harshavardhan Unnibhavi&lt;br /&gt;
#** Subproject: Optimize pre-dump algo&lt;br /&gt;
#&lt;br /&gt;
#* Subham Kumar&lt;br /&gt;
#** Subproject: Anonymize image files&lt;br /&gt;
#&lt;br /&gt;
#* Vaibhav Gupta&lt;br /&gt;
#** Subproject: Optimize logging engine&lt;br /&gt;
#&lt;br /&gt;
#* Anastasia Markina&lt;br /&gt;
#** Subproject: Optimize logging engine&lt;br /&gt;
#** Subproject: Anonymize image files&lt;br /&gt;
#&lt;br /&gt;
#* Abishek Dubey&lt;br /&gt;
#** Subproject: Optimize pre-dump or anon images&lt;br /&gt;
#** Subproject: Postcopy for shared memory and hugetlbfs&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4799</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4799"/>
		<updated>2019-01-22T07:48:58Z</updated>

		<summary type="html">&lt;p&gt;Rppt: add memory tracking with userfaultfd-WP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Suggested ideas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post-copy for shared memory and hugetlbfs ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' extend post-copy memory restore and migration to support shared memory and hugeltbfs.&lt;br /&gt;
&lt;br /&gt;
CRIU relies on [[Userfaultfd]] mechanism in the Linux kernel to implement the demand paging in userspace and allow post-copy memory (or lazy) [[Lazy_migration|migration]]. However, currently this support is limited to anonymous private memory mappings, although kernel also supports shared memory areas and hugetlbfs backed memory.&lt;br /&gt;
&lt;br /&gt;
The shared memory support for lazy migration can be added to CRIU without kernel modifications, while proper handling of hugetlbfs would require userfaultfd callbacks for [http://man7.org/linux/man-pages/man2/fallocate.2.html fallocate(PUNCH_HOLE)] and [http://man7.org/linux/man-pages/man2/madvise.2.html madvise(MADV_REMOVE)] system calls.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html hugetlbfs]&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of cgroups v2 ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/252&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Suggested by: Person who suggested the idea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize the pre-dump algorithm ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM&lt;br /&gt;
 &lt;br /&gt;
Current [[CLI/cmd/pre-dump|pre-dump]] mode is used to write task memory contents into image&lt;br /&gt;
files w/o stopping the task for too long. It does this by stopping the task, infecting it and&lt;br /&gt;
draining all the memory into a set of pipes. Then the task is cured and resumed and the pipes'&lt;br /&gt;
contents is written into images (maybe a [[page server]]). This approach creates a big stress&lt;br /&gt;
on memory subsystem, as keeping all the memory in pipes creates a lot of unreclaimable memory&lt;br /&gt;
(pages in pipes are not swappable), as well as the number of pipes themselves can be buge (as&lt;br /&gt;
one pipe doesn't store more than a fixed certain amount of data).&lt;br /&gt;
&lt;br /&gt;
We can try to use sys_read_process_vm() syscall to mitigate all of the above. To do this we&lt;br /&gt;
need to allocate a temporary buffer in criu, then walk the target process vm by copying the&lt;br /&gt;
memory piece-by-piece into it, then flush the data into image (or page server), then repeat.&lt;br /&gt;
&lt;br /&gt;
Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as&lt;br /&gt;
the read_process_vm does, but vmsplices the data&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/351&lt;br /&gt;
* [[Memory dumping and restoring]], [[Memory changes tracking]]&lt;br /&gt;
* [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2017/11/22/527 RFC for splice_process_vm syscall]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymize image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implement diskless migration ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Need to investigate and implement that named diskless migration.&lt;br /&gt;
 &lt;br /&gt;
By diskless we imply a case where all images generated by checkpoint procedure do not sit on storage at all but rather get collected by the criu service on a destination machine, and read from memory later once restore procedure is initiated. More importantly the memory transferred should be deduplicated on the fly and premapped at some preliminary address. Later the restore procedure just remap data to proper positions without copying page data at all.&lt;br /&gt;
&lt;br /&gt;
This task is under the question still and the section is like a placeholder.&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Cyrill Gorcunov &amp;lt;gorcunov@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Cyrill Gorcunov &amp;lt;gorcunov@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory changes tracking with userfaultfd-WP ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' add ability to track memory changes of the snapshotted processes using userfaultfd-WP&lt;br /&gt;
&lt;br /&gt;
Currently CRIU uses [[Memory_changes_tracking|Soft-dirty]] mechanism in Linux kernel to track memory changes.&lt;br /&gt;
This mechanism can be complemented or even completely replaced with recently proposed userfaultfd-WP.&lt;br /&gt;
&lt;br /&gt;
Userfault allows implementation of paging in userspace. It allows an application to receive notifications about page faults and provide the desired memory contents for the faulting pages. In the current upstream kernels only missing page faults are supported, but there is an ongoing work to allow notifications for write faults as well. Using these notifications it would be possible to precisely track memory accesses of during pre-dump iterations and this approach may prove more efficient than soft-dirty.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://github.com/xzpeter/linux/tree/uffd-wp-merged Userfaultfd-WP]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/soft-dirty.html?highlight=soft%20dirty Soft-Dirty]&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4794</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4794"/>
		<updated>2019-01-16T16:01:29Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Post-copy for shared memory and hugetlbfs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Suggested ideas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post-copy for shared memory and hugetlbfs ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' extend post-copy memory restore and migration to support shared memory and hugeltbfs.&lt;br /&gt;
&lt;br /&gt;
CRIU relies on [[Userfaultfd]] mechanism in the Linux kernel to implement the demand paging in userspace and allow post-copy memory (or lazy) [[Lazy_migration|migration]]. However, currently this support is limited to anonymous private memory mappings, although kernel also supports shared memory areas and hugetlbfs backed memory.&lt;br /&gt;
&lt;br /&gt;
The shared memory support for lazy migration can be added to CRIU without kernel modifications, while proper handling of hugetlbfs would require userfaultfd callbacks for [http://man7.org/linux/man-pages/man2/fallocate.2.html fallocate(PUNCH_HOLE)] and [http://man7.org/linux/man-pages/man2/madvise.2.html madvise(MADV_REMOVE)] system calls.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html hugetlbfs]&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of cgroups v2 ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/252&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Suggested by: Person who suggested the idea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize the pre-dump algorithm ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM&lt;br /&gt;
 &lt;br /&gt;
Current [[CLI/cmd/pre-dump|pre-dump]] mode is used to write task memory contents into image&lt;br /&gt;
files w/o stopping the task for too long. It does this by stopping the task, infecting it and&lt;br /&gt;
draining all the memory into a set of pipes. Then the task is cured and resumed and the pipes'&lt;br /&gt;
contents is written into images (maybe a [[page server]]). This approach creates a big stress&lt;br /&gt;
on memory subsystem, as keeping all the memory in pipes creates a lot of unreclaimable memory&lt;br /&gt;
(pages in pipes are not swappable), as well as the number of pipes themselves can be buge (as&lt;br /&gt;
one pipe doesn't store more than a fixed certain amount of data).&lt;br /&gt;
&lt;br /&gt;
We can try to use sys_read_process_vm() syscall to mitigate all of the above. To do this we&lt;br /&gt;
need to allocate a temporary buffer in criu, then walk the target process vm by copying the&lt;br /&gt;
memory piece-by-piece into it, then flush the data into image (or page server), then repeat.&lt;br /&gt;
&lt;br /&gt;
Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as&lt;br /&gt;
the read_process_vm does, but vmsplices the data&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/351&lt;br /&gt;
* [[Memory dumping and restoring]], [[Memory changes tracking]]&lt;br /&gt;
* [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2017/11/22/527 RFC for splice_process_vm syscall]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymize image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4749</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4749"/>
		<updated>2018-11-16T21:27:19Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Pending patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2018/1/9/32 lkml] || vm: add a syscall to map a process memory into a pipe || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f2780d6d74}} || tun: Add ioctl() SIOCGSKNS cmd to allow obtaining net ns of tun device || 4.17-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df2cc96e77}} || userfaultfd: prevent non-cooperative events vs mcopy_atomic races || 4.18-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4748</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4748"/>
		<updated>2018-11-16T21:26:46Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Pending patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|-&lt;br /&gt;
|https://lkml.org/lkml/2018/1/9/32 lkml] || vm: add a syscall to map a process memory into a pipe || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f2780d6d74}} || tun: Add ioctl() SIOCGSKNS cmd to allow obtaining net ns of tun device || 4.17-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df2cc96e77}} || userfaultfd: prevent non-cooperative events vs mcopy_atomic races || 4.18-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4747</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4747"/>
		<updated>2018-11-16T21:24:59Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Merged patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f2780d6d74}} || tun: Add ioctl() SIOCGSKNS cmd to allow obtaining net ns of tun device || 4.17-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df2cc96e77}} || userfaultfd: prevent non-cooperative events vs mcopy_atomic races || 4.18-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4746</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4746"/>
		<updated>2018-11-16T21:22:49Z</updated>

		<summary type="html">&lt;p&gt;Rppt: Add &amp;quot;userfaultfd: prevent non-cooperative events vs mcopy_atomic races &amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f2780d6d74}} || tun: Add ioctl() SIOCGSKNS cmd to allow obtaining net ns of tun device || 4.17-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|df2cc96e77}} || userfaultfd: prevent non-cooperative events vs mcopy_atomic races || 4.18-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4745</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4745"/>
		<updated>2018-11-16T21:20:27Z</updated>

		<summary type="html">&lt;p&gt;Rppt: remove pending userfaultfd patches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f2780d6d74}} || tun: Add ioctl() SIOCGSKNS cmd to allow obtaining net ns of tun device || 4.17-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=4682</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=4682"/>
		<updated>2018-10-04T10:29:19Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Linux Plumbers Conference 2018 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Open Source Summit Europe 2018 ==&lt;br /&gt;
&lt;br /&gt;
'''Oct 24, 2018, Edinburgh, UK'''&lt;br /&gt;
&lt;br /&gt;
[https://osseu18.sched.com/event/FxYI/to-kill-or-to-checkpoint-that-is-the-question-mike-rapoport-ibm-adrian-reber-red-hat To Kill, or to Checkpoint - That is the Question]&lt;br /&gt;
&lt;br /&gt;
--[[User:Adrian]] 09:46, 29 September 2018 (UTC)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2018 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Nov 13-15, 2018, Vancouver, Canada'''&lt;br /&gt;
&lt;br /&gt;
[https://blog.linuxplumbersconf.org/2018/containers-microconference-accepted-into-2018-linux-plumbers-conference/ Containers and Checkpoint-Restart microconf]&lt;br /&gt;
&lt;br /&gt;
--[[User:Rppt]] 18:32, 13 Aug 2018 (IDT)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=News/events&amp;diff=4642</id>
		<title>News/events</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=News/events&amp;diff=4642"/>
		<updated>2018-08-13T15:36:31Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt; __NOTOC__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
   This page is&lt;br /&gt;
   1. used directly (i.e. one can view it);&lt;br /&gt;
   2. included into some other pages;&lt;br /&gt;
   3. exported via RSS.&lt;br /&gt;
   Because of that, extreme care should be taken when modifying it.&lt;br /&gt;
&lt;br /&gt;
   PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST&lt;br /&gt;
&lt;br /&gt;
   --kir&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page collects into about events criu takes part in.&lt;br /&gt;
&amp;lt;startFeed/&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux Plumbers Conference 2018 ==&lt;br /&gt;
[[Image:Linuxplumbers.png|left|100px|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Nov 13-15, 2018, Vancouver, Canada'''&lt;br /&gt;
&lt;br /&gt;
[https://blog.linuxplumbersconf.org/2018/containers-microconference-accepted-into-2018-linux-plumbers-conference/ Containers microconf]&lt;br /&gt;
&lt;br /&gt;
--[[User:Rppt]] 18:32, 13 Aug 2018 (IDT)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;endFeed/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[News/events/past|Past events]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4593</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4593"/>
		<updated>2018-05-24T06:06:07Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Pending patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2018/2/27/78 lkml] || userfaultfd: non-cooperative: syncronous events || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2018/5/23/142 lkml] || userfaultfd: prevent non-cooperative events vs mcopy_atomic races || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f2780d6d74}} || tun: Add ioctl() SIOCGSKNS cmd to allow obtaining net ns of tun device || 4.17-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Lazy_migration&amp;diff=4570</id>
		<title>Lazy migration</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Lazy_migration&amp;diff=4570"/>
		<updated>2018-04-24T11:10:18Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Lazy-pages Daemon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Lazy, or [[wikipedia:Live_migration#Post-copy_memory_migration|post-copy memory migration]], allows to minimize application downtime. Unlike [[wikipedia:Live_migration#Pre-copy_memory_migration|pre-copy memory migration]], lazy migration does not copy the task's memory, but rather keeps the memory pages at the source node. Only the minimal task state required to start the application is copied to the destination node and the task is resumed there. When the task accesses missing memory pages, &amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; processes the page faults, transfers the required page from the source node and injects it into the running task address space.&lt;br /&gt;
&lt;br /&gt;
== Using Lazy Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Dump ===&lt;br /&gt;
The &amp;lt;code&amp;gt;dump&amp;lt;/code&amp;gt; action should be invoked with &amp;lt;code&amp;gt;--lazy-pages&amp;lt;/code&amp;gt; option. In addition, &amp;lt;code&amp;gt;--address&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--port&amp;lt;/code&amp;gt; options may be used to select IP address and port that will be serving the page requests&lt;br /&gt;
&lt;br /&gt;
 [src]# criu dump --tree &amp;lt;pid&amp;gt; --images-dir &amp;lt;dir&amp;gt; --lazy-pages --address &amp;lt;src&amp;gt; --port &amp;lt;port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy images ===&lt;br /&gt;
Copy the images onto the destination node:&lt;br /&gt;
&lt;br /&gt;
 [src]# scp -r &amp;lt;dir&amp;gt; &amp;lt;dst-node&amp;gt;/&amp;lt;dir&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The images do not contain the massive bulk of the memory dump, they are relatively small and the copy won't take long.&lt;br /&gt;
&lt;br /&gt;
=== Lazy-pages Daemon ===&lt;br /&gt;
The &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon is responsible for handling the task's page faults and injecting the memory pages into the task's address space. The &amp;lt;code&amp;gt;--page-server&amp;lt;/code&amp;gt; option should be set so that &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; daemon will connect to the '''src''' node. The &amp;lt;code&amp;gt;--address&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--port&amp;lt;/code&amp;gt; options should be used to define the IP address and port of the &amp;lt;code&amp;gt;dump&amp;lt;/code&amp;gt; side.&lt;br /&gt;
&lt;br /&gt;
 [dst]# criu lazy-pages --images-dir &amp;lt;dir&amp;gt; --page-server --address &amp;lt;src&amp;gt; --port &amp;lt;port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
The &amp;lt;code&amp;gt;restore&amp;lt;/code&amp;gt; should be run with &amp;lt;code&amp;gt;--lazy-pages&amp;lt;/code&amp;gt; option&lt;br /&gt;
&lt;br /&gt;
 [dst]# criu restore --images-dir &amp;lt;dir&amp;gt; --lazy-pages&lt;br /&gt;
&lt;br /&gt;
Note, that &amp;lt;code&amp;gt;lazy-pages&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;restore&amp;lt;/code&amp;gt; must be run in the same working directory, or &amp;lt;code&amp;gt;--work-dir&amp;lt;/code&amp;gt; option should be explicitly set.&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
&lt;br /&gt;
To view an example video of using a lazy-pages, please go to https://asciinema.org/a/4QgtYPW9XtTngTyCX5Jsibqth&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Userfaultfd]]&lt;br /&gt;
* [[Live migration]]&lt;br /&gt;
* [[Iterative migration]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:New features]]&lt;br /&gt;
[[Category:Live migration]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4534</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4534"/>
		<updated>2018-02-28T07:04:17Z</updated>

		<summary type="html">&lt;p&gt;Rppt: /* Pending patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2018/2/27/78 lkml] || userfaultfd: non-cooperative: syncronous events || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Compel&amp;diff=4470</id>
		<title>Compel</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Compel&amp;diff=4470"/>
		<updated>2017-09-28T08:46:57Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Compel''' is a utility to execute arbitrary code in a context of a foreign process. Compel is part of CRIU, and its sources are available from [https://github.com/checkpoint-restore/criu/tree/criu-dev/compel the criu-dev branch of CRIU repo, subdirectory compel].&lt;br /&gt;
&lt;br /&gt;
The code to be executed is called '''parasite code'''. Once compiled with compel flags and packed, it can be executed in other task's context. Note the code is run in environment without glibc, thus it can not call the usual stdio/stdlib/etc. functions.&lt;br /&gt;
&lt;br /&gt;
A set of [[compel plugins]] are provided for your convenience. Plugins get linked to the parasite binary during the pack stage.&lt;br /&gt;
&lt;br /&gt;
== Writing parasite code ==&lt;br /&gt;
&lt;br /&gt;
Execution of parasite code always starts with a function in compel std plugin that should be linked with parasite binary (see below). From the parasite code these symbols should be available for libcompel to work&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parasite_trap_cmd(int cmd, void *arg);&amp;lt;/code&amp;gt;&lt;br /&gt;
: This routine gets called by &amp;lt;code&amp;gt;compel_run_in_thread()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parasite_daemon_cmd(int cmd, void *arg);&amp;lt;/code&amp;gt;&lt;br /&gt;
: This routine gets called by &amp;lt;code&amp;gt;compel_rpc_call()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;compel_rpc_call_sync()&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;arg&amp;lt;/code&amp;gt; points to the memory with arguments, see the [[#Arguments passing]] section below.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parasite_cleanup(void);&amp;lt;/code&amp;gt;&lt;br /&gt;
: This gets called on parasite unload by &amp;lt;code&amp;gt;compel_cure()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compiling and packing ==&lt;br /&gt;
&lt;br /&gt;
Compile the source of your parasite code with compel flags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -c foo1.c -o foo1.o $(compel cflags)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then link the parasite binary. Include all the .o files needed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ld $(compel ldflags) foo1.o foo2.o $(compel plugins) -o parasite.po &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The .po blob can now be loaded as parasite.&lt;br /&gt;
&lt;br /&gt;
== Loading blob ==&lt;br /&gt;
&lt;br /&gt;
=== Using CLI ===&lt;br /&gt;
&lt;br /&gt;
This functionality is in plans and not implemented yet.&lt;br /&gt;
&lt;br /&gt;
=== Using libcompel.a library ===&lt;br /&gt;
&lt;br /&gt;
Currently there is only one way to load the blob into victim task using libcompel.a, called ''c-header'' &amp;lt;ref&amp;gt;This is done for historical reasons, it was the most handy way to load [[parasite code]] by CRIU. In plans we have loading the .po ELF file itself&amp;lt;/ref&amp;gt;. First you should make a header out of you .po file with the &amp;lt;code&amp;gt;hgen&amp;lt;/code&amp;gt; action of compel tool:&lt;br /&gt;
&lt;br /&gt;
 compel hgen -f parasite.po -o parasite.h&lt;br /&gt;
&lt;br /&gt;
Options meaning is the following:&lt;br /&gt;
* &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; tells which binary to turn into header&lt;br /&gt;
* &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt; tells where to write the resulting header&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;parasite.h&amp;lt;/code&amp;gt; file is ready, it should be included into the infecting program source code to be compiled with it.&lt;br /&gt;
&lt;br /&gt;
== Running parasite code ==&lt;br /&gt;
&lt;br /&gt;
So, in order to infect a task with parasite one must do the following.&lt;br /&gt;
&lt;br /&gt;
* Stop the task. This is done by calling &amp;lt;code&amp;gt;compel_stop_task(int pid)&amp;lt;/code&amp;gt;. Its return value should be saved in case it's positive (it contains the task state).&lt;br /&gt;
* Prepare the infection handler. This is done by calling &amp;lt;code&amp;gt;compel_prepare(int pid)&amp;lt;/code&amp;gt;. The return value is an opaque pointer to &amp;lt;code&amp;gt;struct parasite_ctl&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Run the remote code:&lt;br /&gt;
** Execute a system call with &amp;lt;code&amp;gt;compel_syscall(ctl, int syscall_nr, long *ret, int arg ...)&amp;lt;/code&amp;gt; (all 6 parameters)&lt;br /&gt;
** Infect the victim with the parasite blob by calling &amp;lt;code&amp;gt;compel_infect(ctl, nr_thread, size_of_args_area)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Cure the victim by calling &amp;lt;code&amp;gt;compel_cure(ctl)&amp;lt;/code&amp;gt;. Note that &amp;lt;code&amp;gt;ctl&amp;lt;/code&amp;gt; pointer is freed by the call so it should not be used thereafter.&lt;br /&gt;
* Resume the task by calling &amp;lt;code&amp;gt;compel_resume_task(pid, orig_state, state)&amp;lt;/code&amp;gt; with the saved state value from the first step.&lt;br /&gt;
&lt;br /&gt;
=== Infecting ===&lt;br /&gt;
&lt;br /&gt;
Infecting the victim with a parasite blob needs some special treatment.&lt;br /&gt;
&lt;br /&gt;
First, the &amp;lt;code&amp;gt;ctl&amp;lt;/code&amp;gt; should be configured with the blob information. For that,&lt;br /&gt;
you should call &amp;lt;code&amp;gt;''PREFIX''_setup_c_header()&amp;lt;/code&amp;gt; function&lt;br /&gt;
with &amp;lt;code&amp;gt;ctl&amp;lt;/code&amp;gt; as an argument. Here &amp;lt;code&amp;gt;''PREFIX''&amp;lt;/code&amp;gt;&lt;br /&gt;
is the same as the argument given to &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; option&lt;br /&gt;
to &amp;lt;code&amp;gt;compel hgen&amp;lt;/code&amp;gt;, and if not given, it is derived&lt;br /&gt;
from the input file name, dropping the path and the suffix&lt;br /&gt;
(in the above example it's &amp;lt;code&amp;gt;parasite&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Second, when infecting a parasite one should specify the amount of threads it will mess with (1, if only the thread leader will be accessed) and the maximum size of the memory area shared between infecting task and parasite used for arguments/result passing.&lt;br /&gt;
&lt;br /&gt;
=== Arguments passing ===&lt;br /&gt;
&lt;br /&gt;
To pass arguments between the infecting code and parasite, one may call &amp;lt;code&amp;gt;compel_parasite_args(ctl, type)&amp;lt;/code&amp;gt; and get the pointer where it can put data. Subsequent calls to &amp;lt;code&amp;gt;compel_rpc_call[_sync]()&amp;lt;/code&amp;gt; will result in this data visible in &amp;lt;code&amp;gt;void *arg&amp;lt;/code&amp;gt; address of the &amp;lt;code&amp;gt;parasite_daemon_cmd()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Compel/Usage_scenarios]]&lt;br /&gt;
* [[Compel plugins]]&lt;br /&gt;
* Examples of working code available [https://github.com/checkpoint-restore/criu/tree/criu-dev/compel/test on github] &amp;lt;ref&amp;gt;Clone the repo, build the project by running &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;, then go to &amp;lt;code&amp;gt;compel/test/$test_name&amp;lt;/code&amp;gt; directory and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; there. Running &amp;lt;code&amp;gt;spy&amp;lt;/code&amp;gt; bynary runs the example. Then -- RTFS or talk to us on [https://lists.openvz.org/mailman/listinfo/criu criu@openvz.org] :)&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Info about CRIU [[code blobs]] in which the same technology is used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:Compel]]&lt;br /&gt;
[[Category:Editor help needed]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=LPC2015_Checkpoint_Restore_notes&amp;diff=4469</id>
		<title>LPC2015 Checkpoint Restore notes</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=LPC2015_Checkpoint_Restore_notes&amp;diff=4469"/>
		<updated>2017-09-28T08:46:17Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Linux Plumbers Conference 2015&lt;br /&gt;
&lt;br /&gt;
[[Image:LPC-microconf-2015.jpg|right|thumb|300px]]&lt;br /&gt;
&lt;br /&gt;
The structure will be short introductions to an issue or topic followed by a discussion with the audience.&lt;br /&gt;
A limit of 3 slides per presentation is enforced to ensure focus and allocate enough time for discussions.&lt;br /&gt;
&lt;br /&gt;
Please use this etherpad to take notes. Microconf leaders will be giving a TWO MINUTE summary of their microconference during the Friday afternoon closing session.&lt;br /&gt;
&lt;br /&gt;
Please remember there is no video this year, so your notes are the only record of your microconference.&lt;br /&gt;
&lt;br /&gt;
Miniconf leaders: Please remember to take note of the approximate number of attendees in your session(s).&lt;br /&gt;
&lt;br /&gt;
SCHEDULE&lt;br /&gt;
&lt;br /&gt;
== Checkpoint and Restore of processes within kernel security mechanisms ==&lt;br /&gt;
Tycho Andersen of Canonical, CRIU contributor&lt;br /&gt;
&lt;br /&gt;
* CRIU port to ARM &lt;br /&gt;
* support for AppArmor, other LSMs need help but framework exists&lt;br /&gt;
* integration of CRIU with seccomp&lt;br /&gt;
* cgroup port to usernsd and unified heirarchy: come help!&lt;br /&gt;
* Question: is there a mechanism/plugin/whatever to migrate a container that is tied to a FPGA or a GPU, so they should be migrated together?&lt;br /&gt;
Answer: yes, there is a tool for it.&lt;br /&gt;
&lt;br /&gt;
== CRIU in HPC ==&lt;br /&gt;
Adrian Reber, an old-time CRIU contributor, Red Hat&lt;br /&gt;
* research project in a university involving CRIU, started in 2009&lt;br /&gt;
* usage scenario: computer simulation for product develpment&lt;br /&gt;
* many nodes, many fails, need for a fail-tolerant HPC&lt;br /&gt;
* hypervisor is not the best virtualization type for HPC due to CPU &amp;amp; I/O overhead&lt;br /&gt;
* looked into BCLR (Berkeley Lab Checkpoint/Restart)&lt;br /&gt;
* requirements to C/R: upstream integration&lt;br /&gt;
* there were different attempts to implement C/R: see also: http://criu.org/Comparison_to_other_CR_projects&lt;br /&gt;
* key features of CRIU project: upstream inclusion, transparent solution wo pre-loading or re-compilation, most functionality in userspace, using standard interfaces as much as possible&lt;br /&gt;
* summary: transparent migration works, OpenMPI supports CRIU (but keeps breaking as OpenMPI moves forward very fast), Parallel migration has WIP status&lt;br /&gt;
&lt;br /&gt;
== CRIU on PowerPC ==&lt;br /&gt;
Laurent Dufour, ported CRIU to PowerPC architecture, IBM&lt;br /&gt;
CRIU 1.6 ported on Power this summer (What did you do this summer? I ported CRIU to PowerPC).&lt;br /&gt;
* Linux kernel was ported to  PowerPC arch in 1994 (See http://gate.crashing.org/doc/ppc/doc003.htm)&lt;br /&gt;
* Big Endian/Little Endian. PowerPC supports both.&lt;br /&gt;
* CRIU support only LE mode&lt;br /&gt;
* Laurent tell about mess in Linux kernel ABI: two ABI currently in kernel&lt;br /&gt;
* impacts: enabling kcmp() syscall, VDSO remapping tracking (both are available since 4.2)&lt;br /&gt;
* There is a general problem with checkpointing / restoring whilst in vDSO. It is possible to end up with two (old and new) entry points and there is currently no way to detect this.&lt;br /&gt;
* The vector register save/restore can get confused in some rare signal call stack cases. Fixing this is in the todo list.&lt;br /&gt;
* A hindrance to getting docker up and running in CRIU/ppc is that the images it downloads at build/startup are x86_64 images. Help requested.&lt;br /&gt;
&lt;br /&gt;
== CRIU Support in Docker for Native Checkpoint and Restore ==&lt;br /&gt;
Saied Kazemi, working on container migration at Google&lt;br /&gt;
* short history of Docker C/R&lt;br /&gt;
* C/R benefits: CRIU allows to save work inside container, shorten startup time, debugging using checkpoint &amp;quot;iage&amp;quot;&lt;br /&gt;
* new web based REPL for node.js - Tonic (https://www.npmjs.com/package/tonic). Checkpoints each step to fix mistakes by restoring from the most recent change.&lt;br /&gt;
* speaker show scheme with Docker client, server and Containers and explain how it works&lt;br /&gt;
* external C/R for Docker: four steps to C/R container in Docker&lt;br /&gt;
* live demo with C/R of Docker Container - looks impressive&lt;br /&gt;
* Manually C/R'ing with this methods leaves 'docker ps' not being able to show the container&lt;br /&gt;
* TODO list is available on Docker's wiki under CRIU&lt;br /&gt;
* broken things after C/R: logging won't work, container control is lost (docker stop, docker kill etc)&lt;br /&gt;
* native C/R in Docker 1.5 (current version is 1.8 - https://blog.docker.com/2015/08/docker-1-8-content-trust-toolbox-registry-orchestration/)&lt;br /&gt;
* C/R support already in libcontainer (runC) - live demo with Quake http://blog.kubernetes.io/2015/07/how-did-quake-demo-from-dockercon-work.html&lt;br /&gt;
* useful links: CRIU PPA; GitHub: 1.5 (https://github.com/SaiedKazemi/docker) Saied Kazemi, 1.8 - Ross Bucher, current - Michael Crosby docker git branch&lt;br /&gt;
&lt;br /&gt;
Slides from Docker Meetup 2014 https://speakerdeck.com/saied/experimental-docker-checkpoint-and-restore-with-criu&lt;br /&gt;
&lt;br /&gt;
== P.Haul: live migrating with CRIU ==&lt;br /&gt;
Pavel Emelyanov, man in a red T-shirt with microphone&lt;br /&gt;
* Process-Haul (like U-Haul, but about processes) See http://criu.org/P.Haul&lt;br /&gt;
* CRIU is a part of solution for live migration of containers&lt;br /&gt;
* CRIU part of live migration: perform nodes compat checks, pre-dumps in a loop, copy fs if not shared, don't forget container config&lt;br /&gt;
* P.Haul migrate container is two steps&lt;br /&gt;
* More information about P.Haul: written in Python, source code https://github.com/checkpoint-restore/p.haul/, can migrate OpenVZ container (How-to https://github.com/checkpoint-restore/p.haul/blob/master/test/mtouch/HOWTO), call rsync on chroot-ed container&lt;br /&gt;
* P.Haul future: Docker/LXC support, smarter interations, shared FS autodetection, post-copy live migration, send images over the wire (CRIU)&lt;br /&gt;
* Discussion of P.Haul started&lt;br /&gt;
LXC has a similar concept, but slightly different. Consensus seems to be easy to achieve as to how to merge (it just needs coding effort).&lt;br /&gt;
Predump allows process to continue running, vs full dump which is a freeze&lt;br /&gt;
&lt;br /&gt;
== Rebootless Kernel Update and its verification ==&lt;br /&gt;
Sanidhya Kashyap, PhD student (Georgia Institute of Technology) and CRIU contributor http://www.cc.gatech.edu/~skashyap/&lt;br /&gt;
* types of OS update with low downtime: dynamic kernel patching (KSplice, Kpatch and Kgraft)&lt;br /&gt;
* scheme with typical OS update&lt;br /&gt;
* KUP: update with C/R of applications&lt;br /&gt;
* CRIU benefits to compare similar projects&lt;br /&gt;
* opportunities in each phase of KUP: checkpoint -&amp;gt; incrementally, restore -&amp;gt; on-demand, C/R -&amp;gt; new abstraction&lt;br /&gt;
* reusing memory of application across reboot&lt;br /&gt;
* memory reuse: PPP (Persistent Physical Pages)&lt;br /&gt;
* evaluation of each techniques performance&lt;br /&gt;
* evaluation: KUP vs kpatch&lt;br /&gt;
* evaluation: end-to-end performance of memcached&lt;br /&gt;
* evaluation: microbenchmark&lt;br /&gt;
* Conclusion: implement native support for page cache, hugepages; on-demand restore with usefaultd; need to overhaul kexec&lt;br /&gt;
&lt;br /&gt;
== Using CRIU for Computer Architecture and Software Studies ==&lt;br /&gt;
Christopher Covington, spec in performance analysis and simulation at Qualcomm,  http://covlibre.net/&lt;br /&gt;
* speaker starts from terminology, it seems talk will be quite technical :P zOMG a technical talk? Isn't it a sales conference?? (it was a joke :) ) (I'll buy two) Take three and get a 25% discount!&lt;br /&gt;
* Counting instructions seems preferable to counting time in order to gain determinancy of elapsed work performed.&lt;br /&gt;
* Useful trick of dumping after zero instructions to gather an image complete with file descriptors, environment, etc, as startup conditions&lt;br /&gt;
 &lt;br /&gt;
CRIU project wiki: http://criu.org/ || Google+ page: https://plus.google.com/+CriuOrg || Twitter: @__criu__  https://twitter.com/__criu__&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; anyone can write to etherpad, please help us filling in the notes &amp;lt;&amp;lt;&amp;lt;&lt;br /&gt;
&lt;br /&gt;
                                                               &lt;br /&gt;
                                           &lt;br /&gt;
                       `       ,           &lt;br /&gt;
       .              `       ,+.          &lt;br /&gt;
        +         .+'        '+'+          &lt;br /&gt;
       +;+;       `         ++++:+         &lt;br /&gt;
      :.++++     :   +     ;+++++          &lt;br /&gt;
       ++++++    ;   +    `++++++'         &lt;br /&gt;
      +++++++'   ,        ++++++++         &lt;br /&gt;
       :++++++'   +      +++++++,          &lt;br /&gt;
       :'+++++++  +;    ++++++++:          &lt;br /&gt;
       ++++++++++ `+:  `++++++':.          &lt;br /&gt;
        +;+'+++++  ++, '+++++'+.           &lt;br /&gt;
         +;+;+++++  ++.+++++ +             &lt;br /&gt;
           ,+:;++++,+++++ :                &lt;br /&gt;
            .   :++++++'                   &lt;br /&gt;
                  ,.+++                    &lt;br /&gt;
                   ++;                     &lt;br /&gt;
                  +,                       &lt;br /&gt;
                .`   ;+                    &lt;br /&gt;
              .++  .+++ ++'`++ ++ ,++  '+' &lt;br /&gt;
          +++++++; ++   ++. +; ++ :++  ++, &lt;br /&gt;
          :++++++  ++   ++'+.  ++ '+:  ++` &lt;br /&gt;
        .;.+++++.  +'   ++     ++ ++   ++  &lt;br /&gt;
      .'`..:., +`  +'   ++`++  ++ ++   ++  &lt;br /&gt;
     `;. .,.  `:   ++ . ++  +; ++ ++   ++  &lt;br /&gt;
     ., .,,.  ..   +++' ++  ++ ++ ++,,,++  &lt;br /&gt;
     .. .;:...;`   ``          +    ,+,    &lt;br /&gt;
     `,...;.;,`                      +     &lt;br /&gt;
      ,...+........,:,...     ,      +     &lt;br /&gt;
      ..'+';'++':.......,+:.  .            &lt;br /&gt;
     ..'...+.......... `.++'.              &lt;br /&gt;
     ....,...;+++''+++.`.;+'.              &lt;br /&gt;
     .+. ...........':: ....               &lt;br /&gt;
     .,`  ,:................               &lt;br /&gt;
    ....`  ..''.....```, ..                &lt;br /&gt;
    ..+'.     ...',..`   .                 &lt;br /&gt;
    ..++.       ..++..                     &lt;br /&gt;
    ..+'.`     `..+++.                     &lt;br /&gt;
     .....      ..+++.                     &lt;br /&gt;
                `.'+'.                     &lt;br /&gt;
                  .'                       &lt;br /&gt;
                  .`                       &lt;br /&gt;
                  `&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4468</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4468"/>
		<updated>2017-09-28T08:45:21Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Mixed-bitness applications ==&lt;br /&gt;
&lt;br /&gt;
That's entirely possible with current kernel ABI to create mixed-bitness applications, which may be ''very'' entangled.&lt;br /&gt;
For example, one could set ''both'' 32-bit and 64-bit robust futex list pointers.&lt;br /&gt;
Or one can create multi-threaded application where some threads are executing 32-bit code, some 64-bit code.&lt;br /&gt;
&lt;br /&gt;
If we ever meet application of such mixed-bitness kind, the support may be added to CRIU quite easily, but it should be done under some compile-time config as it'll add more syscalls to usual C/R where they aren't needed.&lt;br /&gt;
&lt;br /&gt;
At this moment there is no plans to add such support and it's quite unlikely that we'll find such application in real world (non-syntetic test).&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== List of failed tests ===&lt;br /&gt;
&lt;br /&gt;
The table is being kept up-to-date by [[User:Dsafonov|Dsafonov]] with latest kernel/CRIU patches in his environment, some of which may be yet not in tree or even yet not sent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Fail reason&lt;br /&gt;
|-&lt;br /&gt;
| autofs || test's bug - hangs without C/R&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/checkpoint-restore/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Template:Commits_by&amp;diff=4467</id>
		<title>Template:Commits by</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Template:Commits_by&amp;diff=4467"/>
		<updated>2017-09-28T08:42:20Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://github.com/checkpoint-restore/criu/commits?author={{{2}}} {{{1}}}]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Template:Bug&amp;diff=4466</id>
		<title>Template:Bug</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Template:Bug&amp;diff=4466"/>
		<updated>2017-09-28T08:40:53Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;[https://github.com/checkpoint-restore/criu/issues/{{{1}}} #{{{1}}}]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;{{Bug|NNN}}&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! Markup&lt;br /&gt;
 ! Result&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;{{Bug|1}}&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
 | {{Bug|1}}&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Template:Git_commit&amp;diff=4465</id>
		<title>Template:Git commit</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Template:Git_commit&amp;diff=4465"/>
		<updated>2017-09-28T08:39:00Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[github:/checkpoint-restore/criu/commit/{{{1}}}|git commit {{{1}}}]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Template:Git_release&amp;diff=4464</id>
		<title>Template:Git release</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Template:Git_release&amp;diff=4464"/>
		<updated>2017-09-28T08:36:10Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[github:/checkpoint-restore/criu/releases/tag/{{{1}}}|{{{1}}}]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Community&amp;diff=4463</id>
		<title>Community</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Community&amp;diff=4463"/>
		<updated>2017-09-28T07:42:13Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Community.jpg|right]]&lt;br /&gt;
CRIU is a community-driven project. It started by Virtuozzo kernel engineers in 2011, but the project potential was soon recognized by other companies and individuals and so they became actively involved. This article summarizes the current state of project community.&lt;br /&gt;
&lt;br /&gt;
== Companies ==&lt;br /&gt;
&lt;br /&gt;
This list includes companies and projects whose employees contributed at least 10 patches,&lt;br /&gt;
and is loosely ordered by the company's contribution amount.&lt;br /&gt;
&lt;br /&gt;
* [https://virtuozzo.com/ Virtuozzo] employs a number of key developers and provides most of the project infrastructure&lt;br /&gt;
* [https://canonical.com/ Canonical] employs {{Commits by|Tycho Andersen|tych0}}&lt;br /&gt;
* [https://cloudlinux.com/ CloudLinux] employs {{Commits by|Ruslan Kuprieiev|efiop}}&lt;br /&gt;
* [https://ibm.com/linux IBM] employs {{Commits by|Laurent Dufour|ldu4}} and {{Commits by|Mike Rapoport|rppt}}&lt;br /&gt;
* [https://google.com/ Google] employs {{Commits by|Filipe Brandenburger|filbranden}} and {{Commits by|Saied Kazemi|SaiedKazemi}}&lt;br /&gt;
* [https://www.codeaurora.org/ CodeAurora] employs Christopher Covington&lt;br /&gt;
* [https://redhat.com/ Red Hat] employs {{Commits by|Oleg Nesterov|utrace}} and {{Commits by|Adrian Reber|adrianreber}}&lt;br /&gt;
* [https://samsung.com/ Samsung], [https://huawei.com/ Huawei] and others employs minor contributors&lt;br /&gt;
* [https://acronis.com/ Acronis] sponsors a few students working on the project&lt;br /&gt;
&lt;br /&gt;
== Get involved ==&lt;br /&gt;
&lt;br /&gt;
Start with subscribing to the [https://lists.openvz.org/mailman/listinfo/criu mailing list],&lt;br /&gt;
where most of the fun is taking place (yes we're old school).&lt;br /&gt;
&lt;br /&gt;
If you are ready to send some actual patches, please don't do so via github, see [[how to submit patches]].&lt;br /&gt;
&lt;br /&gt;
For other ways to be involved, see [[contacts]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[History]]&lt;br /&gt;
* [[How to submit patches]]&lt;br /&gt;
* [[Contacts]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/graphs/contributors&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Compel&amp;diff=4462</id>
		<title>Compel</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Compel&amp;diff=4462"/>
		<updated>2017-09-28T07:42:03Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Compel''' is a utility to execute arbitrary code in a context of a foreign process. Compel is part of CRIU, and its sources are available from [https://github.com/checkpoint-restore/criu/tree/criu-dev/compel the criu-dev branch of CRIU repo, subdirectory compel].&lt;br /&gt;
&lt;br /&gt;
The code to be executed is called '''parasite code'''. Once compiled with compel flags and packed, it can be executed in other task's context. Note the code is run in environment without glibc, thus it can not call the usual stdio/stdlib/etc. functions.&lt;br /&gt;
&lt;br /&gt;
A set of [[compel plugins]] are provided for your convenience. Plugins get linked to the parasite binary during the pack stage.&lt;br /&gt;
&lt;br /&gt;
== Writing parasite code ==&lt;br /&gt;
&lt;br /&gt;
Execution of parasite code always starts with a function in compel std plugin that should be linked with parasite binary (see below). From the parasite code these symbols should be available for libcompel to work&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parasite_trap_cmd(int cmd, void *arg);&amp;lt;/code&amp;gt;&lt;br /&gt;
: This routine gets called by &amp;lt;code&amp;gt;compel_run_in_thread()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parasite_daemon_cmd(int cmd, void *arg);&amp;lt;/code&amp;gt;&lt;br /&gt;
: This routine gets called by &amp;lt;code&amp;gt;compel_rpc_call()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;compel_rpc_call_sync()&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;arg&amp;lt;/code&amp;gt; points to the memory with arguments, see the [[#Arguments passing]] section below.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parasite_cleanup(void);&amp;lt;/code&amp;gt;&lt;br /&gt;
: This gets called on parasite unload by &amp;lt;code&amp;gt;compel_cure()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compiling and packing ==&lt;br /&gt;
&lt;br /&gt;
Compile the source of your parasite code with compel flags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -c foo1.c -o foo1.o $(compel cflags)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then link the parasite binary. Include all the .o files needed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ld $(compel ldflags) foo1.o foo2.o $(compel plugins) -o parasite.po &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The .po blob can now be loaded as parasite.&lt;br /&gt;
&lt;br /&gt;
== Loading blob ==&lt;br /&gt;
&lt;br /&gt;
=== Using CLI ===&lt;br /&gt;
&lt;br /&gt;
This functionality is in plans and not implemented yet.&lt;br /&gt;
&lt;br /&gt;
=== Using libcompel.a library ===&lt;br /&gt;
&lt;br /&gt;
Currently there is only one way to load the blob into victim task using libcompel.a, called ''c-header'' &amp;lt;ref&amp;gt;This is done for historical reasons, it was the most handy way to load [[parasite code]] by CRIU. In plans we have loading the .po ELF file itself&amp;lt;/ref&amp;gt;. First you should make a header out of you .po file with the &amp;lt;code&amp;gt;hgen&amp;lt;/code&amp;gt; action of compel tool:&lt;br /&gt;
&lt;br /&gt;
 compel hgen -f parasite.po -o parasite.h&lt;br /&gt;
&lt;br /&gt;
Options meaning is the following:&lt;br /&gt;
* &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; tells which binary to turn into header&lt;br /&gt;
* &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt; tells where to write the resulting header&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;parasite.h&amp;lt;/code&amp;gt; file is ready, it should be included into the infecting program source code to be compiled with it.&lt;br /&gt;
&lt;br /&gt;
== Running parasite code ==&lt;br /&gt;
&lt;br /&gt;
So, in order to infect a task with parasite one must do the following.&lt;br /&gt;
&lt;br /&gt;
* Stop the task. This is done by calling &amp;lt;code&amp;gt;compel_stop_task(int pid)&amp;lt;/code&amp;gt;. Its return value should be saved in case it's positive (it contains the task state).&lt;br /&gt;
* Prepare the infection handler. This is done by calling &amp;lt;code&amp;gt;compel_prepare(int pid)&amp;lt;/code&amp;gt;. The return value is an opaque pointer to &amp;lt;code&amp;gt;struct parasite_ctl&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Run the remote code:&lt;br /&gt;
** Execute a system call with &amp;lt;code&amp;gt;compel_syscall(ctl, int syscall_nr, long *ret, int arg ...)&amp;lt;/code&amp;gt; (all 6 parameters)&lt;br /&gt;
** Infect the victim with the parasite blob by calling &amp;lt;code&amp;gt;compel_infect(ctl, nr_thread, size_of_args_area)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Cure the victim by calling &amp;lt;code&amp;gt;compel_cure(ctl)&amp;lt;/code&amp;gt;. Note that &amp;lt;code&amp;gt;ctl&amp;lt;/code&amp;gt; pointer is freed by the call so it should not be used thereafter.&lt;br /&gt;
* Resume the task by calling &amp;lt;code&amp;gt;compel_resume_task(pid, orig_state, state)&amp;lt;/code&amp;gt; with the saved state value from the first step.&lt;br /&gt;
&lt;br /&gt;
=== Infecting ===&lt;br /&gt;
&lt;br /&gt;
Infecting the victim with a parasite blob needs some special treatment.&lt;br /&gt;
&lt;br /&gt;
First, the &amp;lt;code&amp;gt;ctl&amp;lt;/code&amp;gt; should be configured with the blob information. For that,&lt;br /&gt;
you should call &amp;lt;code&amp;gt;''PREFIX''_setup_c_header()&amp;lt;/code&amp;gt; function&lt;br /&gt;
with &amp;lt;code&amp;gt;ctl&amp;lt;/code&amp;gt; as an argument. Here &amp;lt;code&amp;gt;''PREFIX''&amp;lt;/code&amp;gt;&lt;br /&gt;
is the same as the argument given to &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; option&lt;br /&gt;
to &amp;lt;code&amp;gt;compel hgen&amp;lt;/code&amp;gt;, and if not given, it is derived&lt;br /&gt;
from the input file name, dropping the path and the suffix&lt;br /&gt;
(in the above example it's &amp;lt;code&amp;gt;parasite&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Second, when infecting a parasite one should specify the amount of threads it will mess with (1, if only the thread leader will be accessed) and the maximum size of the memory area shared between infecting task and parasite used for arguments/result passing.&lt;br /&gt;
&lt;br /&gt;
=== Arguments passing ===&lt;br /&gt;
&lt;br /&gt;
To pass arguments between the infecting code and parasite, one may call &amp;lt;code&amp;gt;compel_parasite_args(ctl, type)&amp;lt;/code&amp;gt; and get the pointer where it can put data. Subsequent calls to &amp;lt;code&amp;gt;compel_rpc_call[_sync]()&amp;lt;/code&amp;gt; will result in this data visible in &amp;lt;code&amp;gt;void *arg&amp;lt;/code&amp;gt; address of the &amp;lt;code&amp;gt;parasite_daemon_cmd()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Compel/Usage_scenarios]]&lt;br /&gt;
* [[Compel plugins]]&lt;br /&gt;
* Examples of working code available [https://github.com/xemul/criu/tree/criu-dev/compel/test on github] &amp;lt;ref&amp;gt;Clone the repo, build the project by running &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;, then go to &amp;lt;code&amp;gt;compel/test/$test_name&amp;lt;/code&amp;gt; directory and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; there. Running &amp;lt;code&amp;gt;spy&amp;lt;/code&amp;gt; bynary runs the example. Then -- RTFS or talk to us on [https://lists.openvz.org/mailman/listinfo/criu criu@openvz.org] :)&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Info about CRIU [[code blobs]] in which the same technology is used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:Compel]]&lt;br /&gt;
[[Category:Editor help needed]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Py-P.Haul&amp;diff=4461</id>
		<title>Py-P.Haul</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Py-P.Haul&amp;diff=4461"/>
		<updated>2017-09-28T07:40:06Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:P.Haul-logo.png|300px|right]]&lt;br /&gt;
&lt;br /&gt;
P.Haul is the project on top of CRIU implementing [[live migration]] usage scenario.&lt;br /&gt;
&lt;br /&gt;
== What does the name mean ==&lt;br /&gt;
&lt;br /&gt;
P.Haul (pronounced pee-hɔːl, Russian: пихль) stands for Process HAULer. &lt;br /&gt;
&lt;br /&gt;
== Project logo ==&lt;br /&gt;
&lt;br /&gt;
The project logo depicts the [https://en.wikipedia.org/wiki/Pyotr_Pavlovich_Yershov#The_Humpbacked_Horse Little Humpbacked Horse] (Russian: [https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%91%D0%BA-%D0%93%D0%BE%D1%80%D0%B1%D1%83%D0%BD%D0%BE%D0%BA конёк-горбунок]). It reflects the main purpose of P.Haul: container migration. The Slavic origin of the logo emphasizes that the project has Russian roots.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!| Download&lt;br /&gt;
!| Description&lt;br /&gt;
|-&lt;br /&gt;
|| [https://static.openvz.org/artwork/PHaul-logo.svg PHaul.svg] || SVG, 973K&lt;br /&gt;
|-&lt;br /&gt;
|| [http://static.openvz.org/artwork/PHaul-logo-800px.png PHaul-logo-800px.png] || PNG, 800x472, 24K&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* GitHub repo: https://github.com/checkpoint-restore/p.haul&lt;br /&gt;
* Mailing list: https://lists.openvz.org/mailman/listinfo/criu&lt;br /&gt;
* A test to play with: https://github.com/checkpoint-restore/p.haul/blob/master/test/mtouch/HOWTO&lt;br /&gt;
* HOWTO migrate OpenVZ container: https://github.com/checkpoint-restore/p.haul/wiki/Live-migrating-OVZ-mainstream-container&lt;br /&gt;
* P.Haul [https://openvz.org/Packages packages] in Linux distributions&lt;br /&gt;
* P.Haul was [http://linuxplumbersconf.org/2015/ocw/proposals/3165 announced] at Checkpoint and Restore MC, Linux Plumbers conference 2015: [https://etherpad.openstack.org/p/LPC2015_Checkpoint_Restore short notes] and [http://www.slideshare.net/openvz/plumbers-phaul150821152856lva1app6891 slides].&lt;br /&gt;
&lt;br /&gt;
[[Category:P.Haul]]&lt;br /&gt;
[[Category:Live migration]]&lt;br /&gt;
[[Category:Sub-projects]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=How_to_submit_patches&amp;diff=4460</id>
		<title>How to submit patches</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=How_to_submit_patches&amp;diff=4460"/>
		<updated>2017-09-28T07:38:32Z</updated>

		<summary type="html">&lt;p&gt;Rppt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Set up working environment ==&lt;br /&gt;
&lt;br /&gt;
Although criu could be run as non-root (see [[Security]]), development is better to be done as root. For example, some tests require root. So, it would be a good idea to set up some recent Linux distro on a virtual machine.&lt;br /&gt;
&lt;br /&gt;
== Get the source code ==&lt;br /&gt;
&lt;br /&gt;
The CRIU sources are tracked by Git. Official CRIU repo is at [https://github.com/checkpoint-restore/criu https://github.com/checkpoint-restore/criu].&lt;br /&gt;
&lt;br /&gt;
The repository may contain multiple branches. Development happens in the '''criu-dev''' branch.&lt;br /&gt;
&lt;br /&gt;
To clone CRIU repo and switch to the proper branch, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
        git clone https://github.com/checkpoint-restore/criu criu&lt;br /&gt;
        cd criu&lt;br /&gt;
        git checkout criu-dev&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compile ==&lt;br /&gt;
&lt;br /&gt;
First, you need to install compile-time dependencies. Check [[Installation#Dependencies]] for more info.&lt;br /&gt;
&lt;br /&gt;
To compile CRIU, run:&lt;br /&gt;
&lt;br /&gt;
        make&lt;br /&gt;
&lt;br /&gt;
This should create the &amp;lt;code&amp;gt;./criu/criu&amp;lt;/code&amp;gt; executable.&lt;br /&gt;
&lt;br /&gt;
== Edit the source code ==&lt;br /&gt;
&lt;br /&gt;
If you use ctags, you can generate the ctags file by running&lt;br /&gt;
&lt;br /&gt;
        make tags&lt;br /&gt;
&lt;br /&gt;
When you change the source code, please keep in mind the following code conventions:&lt;br /&gt;
&lt;br /&gt;
* we prefer tabs and indentations to be 8 characters width&lt;br /&gt;
* consider reading [https://www.kernel.org/doc/Documentation/CodingStyle Linux kernel coding style].&lt;br /&gt;
&lt;br /&gt;
Other conventions can be learned from the source code itself. In short, make sure your new code&lt;br /&gt;
looks similar to what is already there.&lt;br /&gt;
&lt;br /&gt;
== Test your changes ==&lt;br /&gt;
&lt;br /&gt;
CRIU comes with an extensive test suite. To check whether your changes introduce any regressions, run&lt;br /&gt;
&lt;br /&gt;
         make test&lt;br /&gt;
&lt;br /&gt;
The command runs [[ZDTM Test Suite]]. Check for any error messages produced by it.&lt;br /&gt;
&lt;br /&gt;
In case you'd rather have someone else run the tests, you can use travis-ci for your&lt;br /&gt;
own github fork of CRIU. It will check the compilation for various supported platforms,&lt;br /&gt;
as well as run most of the tests from the suite. See https://travis-ci.org/xemul/criu&lt;br /&gt;
for more details.&lt;br /&gt;
&lt;br /&gt;
== Make a patch ==&lt;br /&gt;
&lt;br /&gt;
To create a patch, run&lt;br /&gt;
&lt;br /&gt;
        git format-patch&lt;br /&gt;
&lt;br /&gt;
You might need to read GIT documentation on how to prepare patches&lt;br /&gt;
for mail submission. Take a look at http://book.git-scm.com/ and/or&lt;br /&gt;
http://git-scm.com/documentation for details. It should not be hard&lt;br /&gt;
at all.&lt;br /&gt;
&lt;br /&gt;
== Sign your work ==&lt;br /&gt;
&lt;br /&gt;
To improve tracking of who did what, we ask you to sign off the patches&lt;br /&gt;
that are to be emailed.&lt;br /&gt;
&lt;br /&gt;
The sign-off is a simple line at the end of the explanation for the&lt;br /&gt;
patch, which certifies that you wrote it or otherwise have the right to&lt;br /&gt;
pass it on as an open-source patch.  The rules are pretty simple: if you&lt;br /&gt;
can certify the below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 46em;&amp;quot;&amp;gt;&lt;br /&gt;
'''Developer's Certificate of Origin 1.1'''&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
    By making a contribution to this project, I certify that:&lt;br /&gt;
    &lt;br /&gt;
    (a) The contribution was created in whole or in part by me and I&lt;br /&gt;
        have the right to submit it under the open source license&lt;br /&gt;
        indicated in the file; or&lt;br /&gt;
    &lt;br /&gt;
    (b) The contribution is based upon previous work that, to the best&lt;br /&gt;
        of my knowledge, is covered under an appropriate open source&lt;br /&gt;
        license and I have the right under that license to submit that&lt;br /&gt;
        work with modifications, whether created in whole or in part&lt;br /&gt;
        by me, under the same open source license (unless I am&lt;br /&gt;
        permitted to submit under a different license), as indicated&lt;br /&gt;
        in the file; or&lt;br /&gt;
    &lt;br /&gt;
    (c) The contribution was provided directly to me by some other&lt;br /&gt;
        person who certified (a), (b) or (c) and I have not modified&lt;br /&gt;
        it.&lt;br /&gt;
    &lt;br /&gt;
    (d) I understand and agree that this project and the contribution&lt;br /&gt;
        are public and that a record of the contribution (including all&lt;br /&gt;
        personal information I submit with it, including my sign-off) is&lt;br /&gt;
        maintained indefinitely and may be redistributed consistent with&lt;br /&gt;
        this project or the open source license(s) involved.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
then you just add a line saying&lt;br /&gt;
&lt;br /&gt;
        Signed-off-by: Random J Developer &amp;lt;random at developer.example.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using your real name (please, no pseudonyms or anonymous contributions if&lt;br /&gt;
it possible).&lt;br /&gt;
&lt;br /&gt;
Hint: you can use &amp;lt;code&amp;gt;git commit -s&amp;lt;/code&amp;gt; to add Signed-off-by line to your&lt;br /&gt;
commit message. To append such line to a commit you already made, use&lt;br /&gt;
&amp;lt;code&amp;gt;git commit --amend -s&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width: 46em;&amp;quot;&amp;gt;&lt;br /&gt;
'''Example patch message'''&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 From: Random J Developer &amp;lt;random at developer.example.org&amp;gt;&lt;br /&gt;
 Subject: [PATCH] Short patch description&lt;br /&gt;
 &lt;br /&gt;
 Long patch description (could be skipped if patch&lt;br /&gt;
 is trivial enough)&lt;br /&gt;
 &lt;br /&gt;
 Signed-off-by: Random J Developer &amp;lt;random at developer.example.org&amp;gt;&lt;br /&gt;
 ---&lt;br /&gt;
 Patch body here&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mail patches ==&lt;br /&gt;
&lt;br /&gt;
The patches should be sent to CRIU development mailing list, &amp;lt;code&amp;gt;criu AT openvz.org&amp;lt;/code&amp;gt;. Note that you need to be subscribed first in order to post. The list web interface is available at https://openvz.org/mailman/listinfo/criu; you can also use standard mailman aliases to work with it.&lt;br /&gt;
&lt;br /&gt;
Please make sure the email client you're using doesn't screw your patch (line wrapping and so on).&lt;br /&gt;
&lt;br /&gt;
== Wait for response ==&lt;br /&gt;
&lt;br /&gt;
Be patient. Most CRIU developers are pretty busy people so if&lt;br /&gt;
there is no immediate response on your patch — don't be surprised,&lt;br /&gt;
sometimes a patch may fly around a week before it gets reviewed.&lt;br /&gt;
&lt;br /&gt;
== Continuous integration ==&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Continuous integration]]''&lt;br /&gt;
&lt;br /&gt;
CRIU tests are run for each series sent to the mailing list. If you get a message from our patchwork that patches failed to pass the tests, you have to investigate what is wrong.&lt;br /&gt;
&lt;br /&gt;
We also recommend you to [[Continuous integration#Enable Travis CI for your repo|enable Travis CI for your repo]] to check patches in your git branch, before sending them to the mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Rppt</name></author>
	</entry>
</feed>