On 9/25/18 3:34 AM, Michal Privoznik wrote: > It may happen that in the list of paths/disk sources to relabel > there is a disk source. If that is the case, the path is NULL. In > that case, we shouldn't try to lock the path. It's likely a > network disk anyway and therefore there is nothing to lock. I think this needs a tweak to reference commit 6d855abc1 which only filtered if the provided @p was a directory. This adds another filter when @p is NULL such as would be the case with networked storage. NB: The storage source is only passed for DAC and not selinux. The DAC code makes a some valiant attempts at src->path if not Local too. The selinux code has lots of branches and callers which seem to validly pass a path, but I could have missed a path or some nuance. The "key" is chasing virSecurityDACChownListAppend and virSecuritySELinuxContextListAppend where the list->[n]items is populated via VIR_APPEND_ELEMENT. Expect to spend some time on the chase! You already have an R-by and I don't have anything else to provide on this particular one other than yeah, better safe than sorry and passing NULL. Although I have to imagine the stat(NULL, &s) in virFileIsDir wouldn't have been pleased. John > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > src/security/security_dac.c | 3 ++- > src/security/security_selinux.c | 3 ++- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/src/security/security_dac.c b/src/security/security_dac.c > index 876cca0f2f..04168feb3d 100644 > --- a/src/security/security_dac.c > +++ b/src/security/security_dac.c > @@ -216,7 +216,8 @@ virSecurityDACTransactionRun(pid_t pid ATTRIBUTE_UNUSED, > for (i = 0; i < list->nItems; i++) { > const char *p = list->items[i]->path; > > - if (virFileIsDir(p)) > + if (!p || > + virFileIsDir(p)) > continue; > > VIR_APPEND_ELEMENT_COPY_INPLACE(paths, npaths, p); > diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c > index 3c847d8dcb..3adbeada14 100644 > --- a/src/security/security_selinux.c > +++ b/src/security/security_selinux.c > @@ -227,7 +227,8 @@ virSecuritySELinuxTransactionRun(pid_t pid ATTRIBUTE_UNUSED, > for (i = 0; i < list->nItems; i++) { > const char *p = list->items[i]->path; > > - if (virFileIsDir(p)) > + if (!p || > + virFileIsDir(p)) > continue; > > VIR_APPEND_ELEMENT_COPY_INPLACE(paths, npaths, p); > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list