]> xenbits.xensource.com Git - people/iwj/xen.git/commitdiff
libs/evtchn: Remove active handler on clean-up or failure
authorJulien Grall <julien.grall@linaro.org>
Fri, 10 Nov 2017 17:10:50 +0000 (17:10 +0000)
committerWei Liu <wei.liu2@citrix.com>
Tue, 14 Nov 2017 13:54:29 +0000 (13:54 +0000)
Commit 89d55473ed16543044a31d1e0d4660cf5a3f49df "xentoolcore_restrict_all:
Implement for libxenevtchn" added a call to register allowing to
restrict the event channel.

However, the call to deregister the handler was not performed if open
failed or when closing the event channel. This will result to corrupt
the list of handlers and potentially crash the application later one.

Fix it by calling xentoolcore_deregister_active_handle on failure and
closure.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Release-acked-by: Julien Grall <julien.grall@linaro.org>
tools/libs/evtchn/core.c

index 14b7549a6bd7a8460d5fbef496fb904b15b66f73..2dba58bf0044edf1f5eb680085b80756b3eb29be 100644 (file)
@@ -56,6 +56,7 @@ xenevtchn_handle *xenevtchn_open(xentoollog_logger *logger, unsigned open_flags)
 
 err:
     osdep_evtchn_close(xce);
+    xentoolcore__deregister_active_handle(&xce->tc_ah);
     xtl_logger_destroy(xce->logger_tofree);
     free(xce);
     return NULL;
@@ -69,6 +70,7 @@ int xenevtchn_close(xenevtchn_handle *xce)
         return 0;
 
     rc = osdep_evtchn_close(xce);
+    xentoolcore__deregister_active_handle(&xce->tc_ah);
     xtl_logger_destroy(xce->logger_tofree);
     free(xce);
     return rc;