Package: release.debian.org Severity: normal Tags: jessie User: release.debian....@packages.debian.org Usertags: pu
I'd like to propose the following update (+ s/UNRELEASED/jessie/) to fix a crash when running svn and using kwallet to store credentials. $ debdiff subversion_1.8.10-6+deb8u{2,3}.dsc diffstat for subversion_1.8.10-6+deb8u2 subversion_1.8.10-6+deb8u3 debian/patches/r1701440-kwallet-segfault | 145 +++++++++++++++++++++++++++++++ subversion-1.8.10/debian/changelog | 7 + subversion-1.8.10/debian/patches/series | 1 3 files changed, 153 insertions(+) diff -u subversion-1.8.10/debian/changelog subversion-1.8.10/debian/changelog --- subversion-1.8.10/debian/changelog +++ subversion-1.8.10/debian/changelog @@ -1,3 +1,10 @@ +subversion (1.8.10-6+deb8u3) UNRELEASED; urgency=medium + + * patches/r1701440-kwallet-segfault: Fix segfault when using kwallet to + store authentication information. (Closes: #736879) + + -- James McCoy <james...@debian.org> Sat, 27 Feb 2016 14:08:40 -0500 + subversion (1.8.10-6+deb8u2) jessie-security; urgency=high * patches/r1708699-mod_auth_ntlm-kerb-fix: Fix regression interacting with diff -u subversion-1.8.10/debian/patches/series subversion-1.8.10/debian/patches/series --- subversion-1.8.10/debian/patches/series +++ subversion-1.8.10/debian/patches/series @@ -28,0 +29 @@ +r1701440-kwallet-segfault only in patch2: unchanged: --- subversion-1.8.10.orig/debian/patches/r1701440-kwallet-segfault +++ subversion-1.8.10/debian/patches/r1701440-kwallet-segfault @@ -0,0 +1,145 @@ +------------------------------------------------------------------------ +r1701440 | svn-role | 2015-09-06 00:00:12 -0400 (Sun, 06 Sep 2015) | 9 lines + +Merge the r1700740 group from trunk: + + * r1700740, r1700951 + Fix registration of kwallet to avoid double free on close + Justification: + Fixes segfault on kwallet close. User reported problem. + Votes: + +1: rhuijben, stsp, brane + + +Index: 1.9.x/subversion/libsvn_auth_kwallet/kwallet.cpp +=================================================================== +--- 1.9.x/subversion/libsvn_auth_kwallet/kwallet.cpp (revision 1701439) ++++ 1.9.x/subversion/libsvn_auth_kwallet/kwallet.cpp (revision 1701440) +@@ -47,6 +47,7 @@ + #include "svn_auth.h" + #include "svn_config.h" + #include "svn_error.h" ++#include "svn_hash.h" + #include "svn_io.h" + #include "svn_pools.h" + #include "svn_string.h" +@@ -135,35 +136,37 @@ + return wid; + } + ++/* Forward definition */ ++static apr_status_t ++kwallet_terminate(void *data); ++ + static KWallet::Wallet * + get_wallet(QString wallet_name, + apr_hash_t *parameters) + { + KWallet::Wallet *wallet = +- static_cast<KWallet::Wallet *> (apr_hash_get(parameters, +- "kwallet-wallet", +- APR_HASH_KEY_STRING)); +- if (! wallet && ! apr_hash_get(parameters, +- "kwallet-opening-failed", +- APR_HASH_KEY_STRING)) ++ static_cast<KWallet::Wallet *> (svn_hash_gets(parameters, ++ "kwallet-wallet")); ++ if (! wallet && ! svn_hash_gets(parameters, "kwallet-opening-failed")) + { + wallet = KWallet::Wallet::openWallet(wallet_name, get_wid(), + KWallet::Wallet::Synchronous); ++ ++ if (wallet) ++ { ++ svn_hash_sets(parameters, "kwallet-wallet", wallet); ++ ++ apr_pool_cleanup_register(apr_hash_pool_get(parameters), ++ parameters, kwallet_terminate, ++ apr_pool_cleanup_null); ++ ++ svn_hash_sets(parameters, "kwallet-initialized", ""); ++ } ++ else ++ { ++ svn_hash_sets(parameters, "kwallet-opening-failed", ""); ++ } + } +- if (wallet) +- { +- apr_hash_set(parameters, +- "kwallet-wallet", +- APR_HASH_KEY_STRING, +- wallet); +- } +- else +- { +- apr_hash_set(parameters, +- "kwallet-opening-failed", +- APR_HASH_KEY_STRING, +- ""); +- } + return wallet; + } + +@@ -171,14 +174,12 @@ + kwallet_terminate(void *data) + { + apr_hash_t *parameters = static_cast<apr_hash_t *> (data); +- if (apr_hash_get(parameters, "kwallet-initialized", APR_HASH_KEY_STRING)) ++ if (svn_hash_gets(parameters, "kwallet-initialized")) + { + KWallet::Wallet *wallet = get_wallet(NULL, parameters); + delete wallet; +- apr_hash_set(parameters, +- "kwallet-initialized", +- APR_HASH_KEY_STRING, +- NULL); ++ svn_hash_sets(parameters, "kwallet-wallet", NULL); ++ svn_hash_sets(parameters, "kwallet-initialized", NULL); + } + return APR_SUCCESS; + } +@@ -236,10 +237,6 @@ + KWallet::Wallet *wallet = get_wallet(wallet_name, parameters); + if (wallet) + { +- apr_hash_set(parameters, +- "kwallet-initialized", +- APR_HASH_KEY_STRING, +- ""); + if (wallet->setFolder(folder)) + { + QString q_password; +@@ -254,9 +251,6 @@ + } + } + +- apr_pool_cleanup_register(pool, parameters, kwallet_terminate, +- apr_pool_cleanup_null); +- + return SVN_NO_ERROR; + } + +@@ -310,10 +304,6 @@ + KWallet::Wallet *wallet = get_wallet(wallet_name, parameters); + if (wallet) + { +- apr_hash_set(parameters, +- "kwallet-initialized", +- APR_HASH_KEY_STRING, +- ""); + if (! wallet->hasFolder(folder)) + { + wallet->createFolder(folder); +@@ -329,9 +319,6 @@ + } + } + +- apr_pool_cleanup_register(pool, parameters, kwallet_terminate, +- apr_pool_cleanup_null); +- + return SVN_NO_ERROR; + } + + +------------------------------------------------------------------------ -- System Information: Debian Release: stretch/sid APT prefers unstable-debug APT policy: (500, 'unstable-debug'), (500, 'unstable'), (1, 'experimental-debug'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386, arm64 Kernel: Linux 4.4.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)