mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-11-04 05:42:37 +00:00 
			
		
		
		
	The binary is used in tandem with CONFIG_STATIC_USERMODEHELPER=y in 4.11+, see the big comment in the binary for the current whitelist of binaries. Signed-off-by: Tycho Andersen <tycho@docker.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <string.h>
 | 
						|
#include <unistd.h>
 | 
						|
 | 
						|
int main(int argc, char *argv[])
 | 
						|
{
 | 
						|
	int i;
 | 
						|
 | 
						|
	/* TODO: this doesn't go anywhere useful right now. It would be nice to
 | 
						|
	 * switch this to syslog() (or some other mechanism) so that we can
 | 
						|
	 * actually read the contents.
 | 
						|
	 */
 | 
						|
	fprintf(stderr, "usermodehelper: ");
 | 
						|
	for (i = 0; i < argc; i++) {
 | 
						|
		fprintf(stderr, "%s ", argv[i]);
 | 
						|
	}
 | 
						|
	fprintf(stderr, "\n");
 | 
						|
 | 
						|
	if (!strcmp(argv[0], "/sbin/mdev")) {
 | 
						|
		/* busybox uses /sbin/mdev for early uevent bootstrapping */
 | 
						|
		execv(argv[0], argv);
 | 
						|
	} else if (!strcmp(argv[0], "/sbin/modprobe")) {
 | 
						|
		/* allow modprobe */
 | 
						|
		execv(argv[0], argv);
 | 
						|
	} else if (!strcmp(argv[0], "/sbin/poweroff") ||
 | 
						|
			!strcmp(argv[0], "/sbin/reboot")) {
 | 
						|
		/* poweroff and reboot are allowed */
 | 
						|
		execv(argv[0], argv);
 | 
						|
	} else {
 | 
						|
		/* This means either we got an unexpected call from the kernel
 | 
						|
		 * or someone is doing something nefarious. Some other possible
 | 
						|
		 * expected callers are:
 | 
						|
		 *  - for core dumps. we don't have a "core" binary, and don't
 | 
						|
		 *    set this by default to anything. when we do, we need to
 | 
						|
		 *    whitelist it here
 | 
						|
		 *  - /linuxrc: we're not doing legacy root setup, so we don't
 | 
						|
		 *     need this
 | 
						|
		 *  - a few drivers and filesystems (drbd, nfs, nfsd, ocfs2)
 | 
						|
		 *  - cgroup notify_on_release handlers, which we do not set
 | 
						|
		 *    (but e.g. systemd needs, if anyone ever tries to boot
 | 
						|
		 *    that on linuxkit)
 | 
						|
		 *  - /sbin/request-key, which we don't provide
 | 
						|
		 *  - on x86, machine check
 | 
						|
		 *
 | 
						|
		 * Today we only call mdev and modprobe, but as we add more
 | 
						|
		 * features to linuxkit this whitelist may need changing (or a
 | 
						|
		 * policy, like always allow stuff in /sbin).
 | 
						|
		 */
 | 
						|
		exit(2);
 | 
						|
	}
 | 
						|
 | 
						|
	perror("exec failed");
 | 
						|
	return 1;
 | 
						|
}
 |