mckernel overlay: replace mcoverlayfs with a soft userspace overlay
mcoverlayfs has a high maintenance burden and does not work on rhel8's 4.18 kernel (while it works on vanilla 4.18...); instead of debugging this further time is better spent making it independent from overlayfs. Change-Id: I7454ae95b0fbb3373c256aa2fd83cdfec466c009
This commit is contained in:
committed by
Masamichi Takagi
parent
6fc9ec1c92
commit
9bf225d193
2
configure
vendored
2
configure
vendored
@ -3766,7 +3766,7 @@ fi
|
|||||||
if test "${enable_mcoverlayfs+set}" = set; then :
|
if test "${enable_mcoverlayfs+set}" = set; then :
|
||||||
enableval=$enable_mcoverlayfs; ENABLE_MCOVERLAYFS=$enableval
|
enableval=$enable_mcoverlayfs; ENABLE_MCOVERLAYFS=$enableval
|
||||||
else
|
else
|
||||||
ENABLE_MCOVERLAYFS=yes
|
ENABLE_MCOVERLAYFS=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -193,7 +193,7 @@ AC_ARG_ENABLE([mcoverlayfs],
|
|||||||
AC_HELP_STRING([--enable-mcoverlayfs],
|
AC_HELP_STRING([--enable-mcoverlayfs],
|
||||||
[enable mcoverlayfs implementation]),
|
[enable mcoverlayfs implementation]),
|
||||||
[ENABLE_MCOVERLAYFS=$enableval],
|
[ENABLE_MCOVERLAYFS=$enableval],
|
||||||
[ENABLE_MCOVERLAYFS=yes])
|
[ENABLE_MCOVERLAYFS=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([rusage],
|
AC_ARG_ENABLE([rusage],
|
||||||
AC_HELP_STRING([--enable-rusage],
|
AC_HELP_STRING([--enable-rusage],
|
||||||
|
|||||||
@ -10,15 +10,12 @@ LIBS=@LIBS@
|
|||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGET)
|
||||||
|
|
||||||
../../libmcexec.a: archdep.o arch_syscall.o
|
../../libmcexec.a: archdep.o
|
||||||
$(AR) cr ../../libmcexec.a archdep.o arch_syscall.o
|
$(AR) cr ../../libmcexec.a archdep.o
|
||||||
|
|
||||||
archdep.o: archdep.c archdep.S
|
archdep.o: archdep.c archdep.S
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $^
|
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $^
|
||||||
|
|
||||||
arch_syscall.o: arch_syscall.c
|
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $<
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(TARGET) *.o
|
$(RM) $(TARGET) *.o
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +0,0 @@
|
|||||||
struct syscall_wait_desc;
|
|
||||||
|
|
||||||
int
|
|
||||||
archdep_syscall(struct syscall_wait_desc *w, long *ret)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
@ -10,15 +10,12 @@ LIBS=@LIBS@
|
|||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGET)
|
||||||
|
|
||||||
../../libmcexec.a: archdep.o arch_syscall.o
|
../../libmcexec.a: archdep.o
|
||||||
$(AR) cr ../../libmcexec.a archdep.o arch_syscall.o
|
$(AR) cr ../../libmcexec.a archdep.o
|
||||||
|
|
||||||
archdep.o: archdep.S
|
archdep.o: archdep.S
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $<
|
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $<
|
||||||
|
|
||||||
arch_syscall.o: arch_syscall.c
|
|
||||||
$(CC) -c -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) -fPIE -pie -pthread $<
|
|
||||||
|
|
||||||
../../libsyscall_intercept_arch.a: archdep_c.o
|
../../libsyscall_intercept_arch.a: archdep_c.o
|
||||||
$(AR) cr ../../libsyscall_intercept_arch.a archdep_c.o
|
$(AR) cr ../../libsyscall_intercept_arch.a archdep_c.o
|
||||||
|
|
||||||
|
|||||||
@ -1,63 +0,0 @@
|
|||||||
#define _GNU_SOURCE
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/resource.h>
|
|
||||||
#include <sys/syscall.h>
|
|
||||||
#include <elf.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include "../../../include/uprotocol.h"
|
|
||||||
#include "../../archdep.h"
|
|
||||||
|
|
||||||
//#define DEBUG
|
|
||||||
#ifndef DEBUG
|
|
||||||
#define __dprint(msg, ...)
|
|
||||||
#define __dprintf(arg, ...)
|
|
||||||
#define __eprint(msg, ...)
|
|
||||||
#define __eprintf(format, ...)
|
|
||||||
#else
|
|
||||||
#define __dprint(msg, ...) {printf("%s: " msg, __FUNCTION__);fflush(stdout);}
|
|
||||||
#define __dprintf(format, ...) {printf("%s: " format, __FUNCTION__, \
|
|
||||||
__VA_ARGS__);fflush(stdout);}
|
|
||||||
#define __eprint(msg, ...) {fprintf(stderr, "%s: " msg, __FUNCTION__);\
|
|
||||||
fflush(stderr);}
|
|
||||||
#define __eprintf(format, ...) {fprintf(stderr, "%s: " format, __FUNCTION__, \
|
|
||||||
__VA_ARGS__);fflush(stderr);}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern char *chgpath(char *, char *);
|
|
||||||
extern long do_strncpy_from_user(int, void *, void *, unsigned long);
|
|
||||||
extern int fd;
|
|
||||||
|
|
||||||
#define SET_ERR(ret) if (ret == -1) ret = -errno
|
|
||||||
|
|
||||||
int
|
|
||||||
archdep_syscall(struct syscall_wait_desc *w, long *ret)
|
|
||||||
{
|
|
||||||
char *fn;
|
|
||||||
char pathbuf[PATH_MAX];
|
|
||||||
char tmpbuf[PATH_MAX];
|
|
||||||
|
|
||||||
switch (w->sr.number) {
|
|
||||||
case __NR_open:
|
|
||||||
*ret = do_strncpy_from_user(fd, pathbuf,
|
|
||||||
(void *)w->sr.args[0], PATH_MAX);
|
|
||||||
if (*ret >= PATH_MAX) {
|
|
||||||
*ret = -ENAMETOOLONG;
|
|
||||||
}
|
|
||||||
if (*ret < 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
__dprintf("open: %s\n", pathbuf);
|
|
||||||
|
|
||||||
fn = chgpath(pathbuf, tmpbuf);
|
|
||||||
|
|
||||||
*ret = open(fn, w->sr.args[1], w->sr.args[2]);
|
|
||||||
SET_ERR(*ret);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,9 @@
|
|||||||
#ifndef _LINUX_LIST_H
|
#ifndef _LINUX_LIST_H
|
||||||
#define _LINUX_LIST_H
|
#define _LINUX_LIST_H
|
||||||
|
|
||||||
|
#ifndef offsetof
|
||||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* container_of - cast a member of a structure out to the containing structure
|
* container_of - cast a member of a structure out to the containing structure
|
||||||
* @ptr: the pointer to the member.
|
* @ptr: the pointer to the member.
|
||||||
|
|||||||
Reference in New Issue
Block a user