Skip to content

Commit

Permalink
virt-aa-helper: Fix permissions for vhost-user socket files
Browse files Browse the repository at this point in the history
QEMU working in vhost-user mode communicates with the other end (i.e.
some virtual router application) via unix domain sockets. This requires
that permissions for the socket files are correctly written into
/etc/apparmor.d/libvirt/libvirt-UUID.files.

Signed-off-by: Michal Dubiel <md@semihalf.com>
  • Loading branch information
majkijin authored and zippy2 committed Jul 2, 2015
1 parent 2007896 commit a188c57
Showing 1 changed file with 13 additions and 15 deletions.
28 changes: 13 additions & 15 deletions src/security/virt-aa-helper.c
Expand Up @@ -32,7 +32,6 @@
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <getopt.h>
#include <sys/utsname.h>
Expand Down Expand Up @@ -542,7 +541,6 @@ array_starts_with(const char *str, const char * const *arr, const long size)
static int
valid_path(const char *path, const bool readonly)
{
struct stat sb;
int npaths, opaths;
const char * const restricted[] = {
"/bin/",
Expand Down Expand Up @@ -590,20 +588,8 @@ valid_path(const char *path, const bool readonly)
if (STRNEQLEN(path, "/", 1))
return 1;

if (!virFileExists(path)) {
if (!virFileExists(path))
vah_warning(_("path does not exist, skipping file type checks"));
} else {
if (stat(path, &sb) == -1)
return -1;

switch (sb.st_mode & S_IFMT) {
case S_IFSOCK:
return 1;
break;
default:
break;
}
}

opaths = sizeof(override)/sizeof(*(override));

Expand Down Expand Up @@ -1101,6 +1087,18 @@ get_files(vahControl * ctl)
}
}

for (i = 0; i < ctl->def->nnets; i++) {
if (ctl->def->nets[i] &&
ctl->def->nets[i]->type == VIR_DOMAIN_NET_TYPE_VHOSTUSER &&
ctl->def->nets[i]->data.vhostuser) {
virDomainChrSourceDefPtr vhu = ctl->def->nets[i]->data.vhostuser;

if (vah_add_file_chardev(&buf, vhu->data.nix.path, "rw",
vhu->type) != 0)
goto cleanup;
}
}

if (ctl->def->virtType == VIR_DOMAIN_VIRT_KVM) {
for (i = 0; i < ctl->def->nnets; i++) {
virDomainNetDefPtr net = ctl->def->nets[i];
Expand Down

0 comments on commit a188c57

Please sign in to comment.