From: Willy Tarreau Date: Thu, 28 Feb 2019 10:09:56 +0000 (+0100) Subject: BUG/MEDIUM: list: fix the rollback on addq in the locked liss X-Git-Tag: v2.0-dev2~153 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd20ad58748eafbded464f574ed84dbbdad31e8d;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: list: fix the rollback on addq in the locked liss Commit a8434ec14 ("MINOR: lists: Implement locked variations.") introduced locked lists which use the elements pointers as locks for concurrent operations. A copy-paste typo in LIST_ADDQ_LOCKED() causes corruption in the list in case the next pointer is already held, as it restores the previous pointer into the next one. It may impact the server pools. This will have to be backported if the commit above is backported. --- diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h index 08228283a3..53db885b82 100644 --- a/include/common/mini-clist.h +++ b/include/common/mini-clist.h @@ -208,7 +208,7 @@ struct cond_wordlist { __ha_barrier_store(); \ n = HA_ATOMIC_XCHG(&p->n, LLIST_BUSY); \ if (n == LLIST_BUSY) { \ - (lh)->n = p; \ + (lh)->p = p; \ __ha_barrier_store(); \ continue; \ } \