Message ID | 20191204093625.14836-10-armbru@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Error handling fixes | expand |
On 12/4/19 10:36 AM, Markus Armbruster wrote: > build_guest_fsinfo_for_virtual_device() dereferences @errp when > build_guest_fsinfo_for_device() fails. That's wrong; see the big > comment in error.h. Introduced in commit 46d4c5723e "qga: Add > guest-get-fsinfo command". > > No caller actually passes null. > > Fix anyway: splice in a local Error *err, and error_propagate(). > > Cc: Michael Roth <mdroth@linux.vnet.ibm.com> > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > qga/commands-posix.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/qga/commands-posix.c b/qga/commands-posix.c > index 1c1a165dae..0be527ccb8 100644 > --- a/qga/commands-posix.c > +++ b/qga/commands-posix.c > @@ -1049,6 +1049,7 @@ static void build_guest_fsinfo_for_virtual_device(char const *syspath, > GuestFilesystemInfo *fs, > Error **errp) > { > + Error *err = NULL; > DIR *dir; > char *dirpath; > struct dirent *entry; > @@ -1078,10 +1079,11 @@ static void build_guest_fsinfo_for_virtual_device(char const *syspath, > > g_debug(" slave device '%s'", entry->d_name); > path = g_strdup_printf("%s/slaves/%s", syspath, entry->d_name); > - build_guest_fsinfo_for_device(path, fs, errp); > + build_guest_fsinfo_for_device(path, fs, &err); > g_free(path); > > - if (*errp) { > + if (err) { > + error_propagate(errp, err); > break; > } > } > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 1c1a165dae..0be527ccb8 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -1049,6 +1049,7 @@ static void build_guest_fsinfo_for_virtual_device(char const *syspath, GuestFilesystemInfo *fs, Error **errp) { + Error *err = NULL; DIR *dir; char *dirpath; struct dirent *entry; @@ -1078,10 +1079,11 @@ static void build_guest_fsinfo_for_virtual_device(char const *syspath, g_debug(" slave device '%s'", entry->d_name); path = g_strdup_printf("%s/slaves/%s", syspath, entry->d_name); - build_guest_fsinfo_for_device(path, fs, errp); + build_guest_fsinfo_for_device(path, fs, &err); g_free(path); - if (*errp) { + if (err) { + error_propagate(errp, err); break; } }
build_guest_fsinfo_for_virtual_device() dereferences @errp when build_guest_fsinfo_for_device() fails. That's wrong; see the big comment in error.h. Introduced in commit 46d4c5723e "qga: Add guest-get-fsinfo command". No caller actually passes null. Fix anyway: splice in a local Error *err, and error_propagate(). Cc: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> --- qga/commands-posix.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)