[libvirt] [PATCH] storage: skip selinux cleanup when fd not available
Osier Yang
jyang at redhat.com
Wed Nov 27 06:43:40 UTC 2013
On 27/11/13 12:00, Eric Blake wrote:
> When attempting to backport gluster pools to an older version
> where there is no VIR_STRDUP, I got a crash from calling
> strdup(,NULL). Rather than relying on the current else branch
> safely doing nothing when there is no fd, it is easier to just
> skip it. While at it, there's no need to explicitly set
> perms.label to NULL after a VIR_FREE().
>
> * src/storage/storage_backend.c
> (virStorageBackendUpdateVolTargetInfoFD): Minor optimization.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>
> src/storage/storage_backend.c | 26 ++++++++++++--------------
> 1 file changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index bde39d6..b08d646 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -1383,28 +1383,26 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageVolTargetPtr target,
>
> VIR_FREE(target->perms.label);
>
> #if WITH_SELINUX
> /* XXX: make this a security driver call */
> - if (fd >= 0 && fgetfilecon_raw(fd, &filecon) == -1) {
> - if (errno != ENODATA && errno != ENOTSUP) {
> - virReportSystemError(errno,
> - _("cannot get file context of '%s'"),
> - target->path);
> - return -1;
> + if (fd >= 0) {
> + if (fgetfilecon_raw(fd, &filecon) == -1) {
> + if (errno != ENODATA && errno != ENOTSUP) {
> + virReportSystemError(errno,
> + _("cannot get file context of '%s'"),
> + target->path);
> + return -1;
> + }
> } else {
> - target->perms.label = NULL;
> - }
> - } else {
> - if (VIR_STRDUP(target->perms.label, filecon) < 0) {
> + if (VIR_STRDUP(target->perms.label, filecon) < 0) {
> + freecon(filecon);
> + return -1;
> + }
> freecon(filecon);
> - return -1;
> }
> - freecon(filecon);
> }
> -#else
> - target->perms.label = NULL;
> #endif
>
> return 0;
> }
>
ACK
More information about the libvir-list
mailing list