X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2FPVE%2FLXC.pm;h=32b0318b18e40aae8f3415271d610802c25df7de;hb=0389da0d5ef1fcafc8916e7046f69def280270bf;hp=810fae57af5c153c1e833c96d40fba39ff8d5de7;hpb=6560ce0fc847b896fa6ab858c46e3db15c8a0994;p=pve-container.git diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index 810fae5..32b0318 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -11,7 +11,7 @@ use File::Path; use File::Spec; use Cwd qw(); use Fcntl qw(O_RDONLY O_NOFOLLOW O_DIRECTORY); -use Errno qw(ELOOP EROFS); +use Errno qw(ELOOP ENOTDIR EROFS); use PVE::Exception qw(raise_perm_exc); use PVE::Storage; @@ -22,6 +22,7 @@ use PVE::CpuSet; use PVE::Network; use PVE::AccessControl; use PVE::ProcFSTools; +use PVE::Syscall; use PVE::LXC::Config; use Time::HiRes qw (gettimeofday); @@ -197,7 +198,7 @@ sub vmstatus { my $memory_stat = read_cgroup_list('memory', $vmid, 'memory.stat'); my $mem_usage_in_bytes = read_cgroup_value('memory', $vmid, 'memory.usage_in_bytes'); - $d->{mem} = $mem_usage_in_bytes - $memory_stat->{cache}; + $d->{mem} = $mem_usage_in_bytes - $memory_stat->{total_cache}; $d->{swap} = read_cgroup_value('memory', $vmid, 'memory.memsw.usage_in_bytes') - $mem_usage_in_bytes; my $blkio_bytes = read_cgroup_value('blkio', $vmid, 'blkio.throttle.io_service_bytes', 1); @@ -897,7 +898,8 @@ sub check_ct_modify_config_perm { return if $delete; my $data = $opt eq 'rootfs' ? PVE::LXC::Config->parse_ct_rootfs($newconf->{$opt}) : PVE::LXC::Config->parse_ct_mountpoint($newconf->{$opt}); - raise_perm_exc("mount point type $data->{type}") if $data->{type} ne 'volume'; + raise_perm_exc("mount point type $data->{type} is only allowed for root\@pam") + if $data->{type} ne 'volume'; } elsif ($opt eq 'memory' || $opt eq 'swap') { $rpcenv->check_vm_perm($authuser, $vmid, $pool, ['VM.Config.Memory']); } elsif ($opt =~ m/^net\d+$/ || $opt eq 'nameserver' || @@ -1051,7 +1053,7 @@ sub walk_tree_nofollow($$$) { if (!$next) { # failed, check for symlinks and try to create the path - die "symlink encountered at: $dir\n" if $! == ELOOP; + die "symlink encountered at: $dir\n" if $! == ELOOP || $! == ENOTDIR; die "cannot open directory $dir: $!\n" if !$mkdir; # We don't check for errors on mkdirat() here and just try to @@ -1101,9 +1103,8 @@ sub __bindmount_verify { die "failed to open mount point: $!\n" if !$destdh; if ($ro) { my $dot = '.'; - # 269: faccessat() # no separate function because 99% of the time it's the wrong thing to use. - if (syscall(269, fileno($destdh), $dot, &POSIX::W_OK, 0) != -1) { + if (syscall(PVE::Syscall::faccessat, fileno($destdh), $dot, &POSIX::W_OK, 0) != -1) { die "failed to mark bind mount read only\n"; } die "read-only check failed: $!\n" if $! != EROFS;