From nobody Mon Jan 24 13:12:03 2022 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 651CE197BC09; Mon, 24 Jan 2022 13:12:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Jj9PH1kmyz4Vp6; Mon, 24 Jan 2022 13:12:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643029923; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vkyQOT/th6dAmiXe4yhejnV0abc3Dyvld7K3fDQp9Ho=; b=H49140QhA5sD4+Q7iyA8Idxh1NZnSsDNNMHkormZtX5xOukNwIKfgZSO6pAOSz29avJ5bD ZekcljBmt5Z5MEHoLzbs+wsXXxA1y6M+w+mIZNnObKAuVpWa9SMQzFOvRRTtH6+mfLYggD f2L3V5IbYdPwDU3I1vEFbwxYHDdsgfYfY8rYxzbGTS1jUGtxTOMHgzvKzmIzv0FQm9qOu/ VLFrBnIDQmzmv1gshWkvzG11y5JSkMXTXqCnZa9QHmLzpdsYR9ZKkeLEjmxjDAHKFuCVV8 eTgL64E3Yz9Fs+jMi0pr6mkRalnw76y6vJwuKc6slpV4gfin278hhHnWzkIbFw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1C25316938; Mon, 24 Jan 2022 13:12:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 20ODC3PB052338; Mon, 24 Jan 2022 13:12:03 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 20ODC3V9052337; Mon, 24 Jan 2022 13:12:03 GMT (envelope-from git) Date: Mon, 24 Jan 2022 13:12:03 GMT Message-Id: <202201241312.20ODC3V9052337@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Adriaan de Groot Subject: git: acbc052765d8 - main - net/kldap: fix crash because of UB List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adridg X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: acbc052765d87af0a436f10b4c5a35880eaa14d2 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643029923; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vkyQOT/th6dAmiXe4yhejnV0abc3Dyvld7K3fDQp9Ho=; b=ONUvqdS56siFrJY4UMQ59fbrZes0ybA1dcOkBETToiL6vP9LmEwlrW6Z3cQYLKFNB9GJlE 3ZS48hIEzSBnA1Xfx1puMV+Bkv65OvJcGkKMXz+a0ojbH7EccQQgMCgx02ryQOmbhiWUeO Pr+lHo5sriP2ddg8o0dz+jKLwTKBoNZ+LMJeUcEhzdpKvM9vPldltC3ZdBu7ovP9YkP4lG fX4Ub2DrAiw0LNenQdfVVNfoY2/rxO9NKjVAxp0wEhM7WEQodLHdW8UkMo+ojn3satzn0q 1WWQmz0Ggw37MMQeR4gsV5I8epcGvLVo86ASpg47KYzC+4tmlhI+84kfwpnypQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1643029923; a=rsa-sha256; cv=none; b=hrmsVi4Cfpr41OAAn/hbjaLaT5jHRnkH+aZbXG7vbvf5RLo+8l4q11KcDOw/xJ8eqK/Y9A HzeDXmjlFotiJ+9KYqSikoG7IiN1ttyi6mlvCaY19O6sWw5YmnBUcRj5EapOefaG3Dw5SS r0I1DQtvInt4bqlstW1/KakW2f6tHMYQYwm7ahrPtjoyRWuCHXE/+CAXEl9l1vd9VRv/jf 8Y6qO646kfXLFQGMtAJWbiLSfwIUsYeCxuB2UBdS1MMYOLIqxw6Q71u3DCamvob5ZdTXOT 8Qo7RS1T5T26xHnHs+D4OQlzVCoTx8lGQn9Sn4lUpdv/w8JDMu38fpZDErtWPQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by adridg: URL: https://cgit.FreeBSD.org/ports/commit/?id=acbc052765d87af0a436f10b4c5a35880eaa14d2 commit acbc052765d87af0a436f10b4c5a35880eaa14d2 Author: Adriaan de Groot AuthorDate: 2022-01-24 11:02:08 +0000 Commit: Adriaan de Groot CommitDate: 2022-01-24 13:12:01 +0000 net/kldap: fix crash because of UB Patch submitted upstream. PR: 261069 --- net/kldap/Makefile | 1 + net/kldap/files/patch-UB.diff | 68 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/net/kldap/Makefile b/net/kldap/Makefile index 4bbd45d60e18..ee58c745a78f 100644 --- a/net/kldap/Makefile +++ b/net/kldap/Makefile @@ -1,5 +1,6 @@ PORTNAME= kldap DISTVERSION= ${KDE_APPLICATIONS_VERSION} +PORTREVISION= 1 CATEGORIES= net kde kde-applications MAINTAINER= kde@FreeBSD.org diff --git a/net/kldap/files/patch-UB.diff b/net/kldap/files/patch-UB.diff new file mode 100644 index 000000000000..6a8c2057156f --- /dev/null +++ b/net/kldap/files/patch-UB.diff @@ -0,0 +1,68 @@ +commit 1683a9d0749550b81ba3fd7ddeba4fc0884acb47 +Author: Adriaan de Groot +Date: Mon Jan 24 11:27:29 2022 +0100 + + Fix crash in destructor when using libcxx (Clang STL, FreeBSD) + + This code crashes in the destructor of LdapClient on FreeBSD. + The crash is visible to uses who + - start KOrganizer + - click the "New Event" button + + The underlying issue is a lot like the one described in + https://blogs.kde.org/2021/02/20/uniqueptr-difference-between-libstdc-and-libc-crashes-your-application + There is a convoluted call-chain on destruction of LdapClient: + - ~LdapClient + - ~std::unique_ptr + - ~LdapClientPrivate + - LdapClient::cancelQuery + - (accesses to members of LdapClientPrivate `d`) + + With libcxx, the pointer in `d` is already set to nullptr and + SEGV happens. I'm not sure it isn't UB, anyway, since the + destructor body for LdapClient has already run. + + The fix moves the implementation of `cancelQuery()` into + the private class. This means that the LdapClient class does + a little less poking-and-prodding in the private class, + but also cuts out the call-from-private-back-to-destroyed- + owning-LdapClient, fixing the SEGV and possible UB. +diff --git src/widgets/ldapclient.cpp src/widgets/ldapclient.cpp +index cf94ea9..012b3a7 100644 +--- src/widgets/ldapclient.cpp ++++ src/widgets/ldapclient.cpp +@@ -31,9 +31,11 @@ public: + + ~LdapClientPrivate() + { +- q->cancelQuery(); ++ cancelQuery(); + } + ++ void cancelQuery(); ++ + void startParseLDIF(); + void parseLDIF(const QByteArray &data); + void endParseLDIF(); +@@ -133,12 +135,17 @@ void LdapClient::startQuery(const QString &filter) + + void LdapClient::cancelQuery() + { +- if (d->mJob) { +- d->mJob->kill(); +- d->mJob = nullptr; ++ d->cancelQuery(); ++} ++ ++void LdapClient::LdapClientPrivate::cancelQuery() ++{ ++ if (mJob) { ++ mJob->kill(); ++ mJob = nullptr; + } + +- d->mActive = false; ++ mActive = false; + } + + void LdapClient::LdapClientPrivate::slotData(KIO::Job *, const QByteArray &data)