bus: extend memfd test

This commit is contained in:
Lennart Poettering 2013-05-10 17:33:44 +02:00
parent c2384970ff
commit a7c54c8c1f
3 changed files with 44 additions and 9 deletions

2
TODO
View File

@ -29,6 +29,8 @@ Fedora 19:
Features:
* maybe add "journalctl -k" as shortcut for "-b _TRANSPORT=kernel"
* Introduce a way how we can kill the main process of a service with KillSignal, but all processes with SIGKILL later on
https://bugzilla.redhat.com/show_bug.cgi?id=952634

View File

@ -106,7 +106,7 @@ int sd_memfd_get_file(sd_memfd *m, FILE **f) {
if (!f)
return -EINVAL;
if (!m->fd) {
if (!m->f) {
m->f = fdopen(m->fd, "r+");
if (!m->f)
return -errno;

View File

@ -32,6 +32,7 @@ int main(int argc, char *argv[]) {
char *s;
uint64_t sz;
int r, fd;
FILE *f;
log_set_max_level(LOG_DEBUG);
@ -43,19 +44,32 @@ int main(int argc, char *argv[]) {
assert_se(r >= 0);
strcpy(s, "hallo");
assert_se(munmap(s, 6) == 0);
r = sd_memfd_set_sealed(m, 1);
assert_se(r == -EPERM);
assert_se(write(sd_memfd_get_fd(m), "he", 2) == 2);
assert_se(write(sd_memfd_get_fd(m), "HE", 2) == 2);
log_error("lseek = %llu", (unsigned long long) lseek(sd_memfd_get_fd(m), 0, SEEK_CUR));
log_info("<%s>", s);
access("HUHU", F_OK);
assert_se(sd_memfd_get_file(m, &f) >= 0);
fputc('L', f);
fflush(f);
access("HAHA", F_OK);
log_info("<%s>", s);
assert_se(munmap(s, 6) == 0);
r = sd_memfd_get_sealed(m);
assert_se(r == 0);
r = sd_memfd_set_sealed(m, 1);
assert_se(r >= 0);
r = sd_memfd_get_sealed(m);
assert_se(r == 1);
r = sd_memfd_get_size(m, &sz);
assert_se(r >= 0);
assert_se(sz = page_size());
@ -63,6 +77,12 @@ int main(int argc, char *argv[]) {
r = sd_memfd_set_size(m, 6);
assert_se(r >= 0);
r = sd_memfd_set_sealed(m, 1);
assert_se(r >= 0);
r = sd_memfd_get_sealed(m);
assert_se(r == 1);
fd = sd_memfd_dup_fd(m);
assert_se(fd >= 0);
@ -78,8 +98,21 @@ int main(int argc, char *argv[]) {
r = sd_memfd_map(m, 0, 6, (void**) &s);
assert_se(r >= 0);
assert_se(streq(s, "hello"));
r = sd_memfd_set_sealed(m, 1);
assert_se(r == -EALREADY);
r = sd_memfd_set_sealed(m, 0);
assert_se(r == -EPERM);
log_info("<%s>", s);
assert_se(streq(s, "heLlo"));
assert_se(munmap(s, 6) == 0);
r = sd_memfd_set_sealed(m, 0);
assert_se(r >= 0);
sd_memfd_free(m);
return 0;
}