]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix CID 352776: Concurrent data access violations
authorMatthijs Mekking <matthijs@isc.org>
Mon, 16 May 2022 17:00:47 +0000 (19:00 +0200)
committerMatthijs Mekking <matthijs@isc.org>
Mon, 23 May 2022 10:03:56 +0000 (12:03 +0200)
*** CID 352776:  Concurrent data access violations  (MISSING_LOCK)
/lib/dns/dst_api.c: 474 in dst_key_setmodified()
468     dst_key_isexternal(dst_key_t *key) {
469 return (key->external);
470     }
471
472     void
473     dst_key_setmodified(dst_key_t *key, bool value) {
>>>     CID 352776:  Concurrent data access violations  (MISSING_LOCK)
>>>     Accessing "key->modified" without holding lock
>>> "dst_key.mdlock". Elsewhere, "dst_key.modified" is accessed with
>>> "dst_key.mdlock" held 8 out of 11 times (8 of these accesses
>>> strongly imply that it is necessary).
474 key->modified = value;
475     }
476
477     bool
478     dst_key_ismodified(dst_key_t *key) {
479 return (key->modified);

(cherry picked from commit 1fa24d0afbc01d25d71446156758b3a945db5b5f)

lib/dns/dst_api.c
lib/dns/include/dst/dst.h

index 8873a041b8e98af54e5946d175e687b4a84b830e..e5a52aea37f471c26667ba8ab4716b5c1ef6f20d 100644 (file)
@@ -492,12 +492,20 @@ dst_key_isexternal(dst_key_t *key) {
 
 void
 dst_key_setmodified(dst_key_t *key, bool value) {
+       isc_mutex_lock(&key->mdlock);
        key->modified = value;
+       isc_mutex_unlock(&key->mdlock);
 }
 
 bool
-dst_key_ismodified(dst_key_t *key) {
-       return (key->modified);
+dst_key_ismodified(const dst_key_t *key) {
+       bool modified;
+
+       isc_mutex_lock(&(((dst_key_t *)key)->mdlock));
+       modified = key->modified;
+       isc_mutex_unlock(&(((dst_key_t *)key)->mdlock));
+
+       return (modified);
 }
 
 isc_result_t
index eab5501029bedc1d1b1a4532838c1cc834c9d0dc..3185e9f91b820b3897f7c873bfcc76c9887a11c8 100644 (file)
@@ -1119,7 +1119,7 @@ dst_key_setmodified(dst_key_t *key, bool value);
  */
 
 bool
-dst_key_ismodified(dst_key_t *key);
+dst_key_ismodified(const dst_key_t *key);
 /*%<
  * Check if the key file has been modified.
  *