On 10/22/2013 01:21 PM, Michal Privoznik wrote: > Currently, if access(path, mode) is invoked, we check if @path has this > special prefix SYSFS_PREFIX. If it does, we modify the path a bit and > call realaccess. If it doesn't we act just like a wrapper and call > realaccess directly. However, we are mocking fopen() as well. And as one > can clearly see there, fopen("/proc/cgroups") will succeed. Hence, we > have an error in our mocked access(): We need to check whether @path is > not equal to /proc/cgroups as it may not exists on real system we're > running however we definitely know how to fopen() it. > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > tests/vircgroupmock.c | 8 ++++++++ > 1 file changed, 8 insertions(+) Close. > > diff --git a/tests/vircgroupmock.c b/tests/vircgroupmock.c > index adc1718..6d7083d 100644 > --- a/tests/vircgroupmock.c > +++ b/tests/vircgroupmock.c > @@ -498,6 +498,14 @@ int access(const char *path, int mode) > } > ret = realaccess(newpath, mode); > free(newpath); > + } else if (STREQ(path, "/proc/cgroups") || > + STREQ(path, "/proc/self/cgroup")) { > + /* These files are readable for all. */ > + ret = (mode == F_OK || mode & R_OK) ? 0 : -1; Our mock means the files are readable for all, but not writable for all. I'd feel safer with: ret = (mode == F_OK || mode == R_OK) ? 0 : -1; so that we explicitly reject attempts to probe for other combinations like 'mode == (R_OK|X_OK)'. > + } else if (STREQ(path, "/proc/mounts")) { > + /* This one is accessible anytime for anybody. In fact, it's just > + * a symlink to /proc/self/mounts. */ > + ret = 0; > } else { > ret = realaccess(path, mode); > } > ACK if that change still passes testing (but there may be fallout from mocking non-writable, which in turn would require a v2). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list