diff -u pulseaudio-0.9.6/debian/changelog pulseaudio-0.9.6/debian/changelog --- pulseaudio-0.9.6/debian/changelog +++ pulseaudio-0.9.6/debian/changelog @@ -1,3 +1,14 @@ +pulseaudio (0.9.6-1ubuntu2.1) gutsy-security; urgency=low + + * [SECURITY] Apply (new) patch fixing unchecked setuid() return + values. Tweak patch from Red Hat #425481. + * References: + CVE-2008-0008 + https://bugzilla.novell.com/show_bug.cgi?id=347822 + https://bugzilla.redhat.com/show_bug.cgi?id=425481 + + -- Daniel T Chen Wed, 23 Jan 2008 20:46:06 -0500 + pulseaudio (0.9.6-1ubuntu2) gutsy; urgency=low * fix esound max samplesize again to make sure teh login sound is playable diff -u pulseaudio-0.9.6/debian/patches/series pulseaudio-0.9.6/debian/patches/series --- pulseaudio-0.9.6/debian/patches/series +++ pulseaudio-0.9.6/debian/patches/series @@ -2,0 +3 @@ +fix_unchecked_setuid_return_values.patch only in patch2: unchanged: --- pulseaudio-0.9.6.orig/debian/patches/fix_unchecked_setuid_return_values.patch +++ pulseaudio-0.9.6/debian/patches/fix_unchecked_setuid_return_values.patch @@ -0,0 +1,105 @@ +Index: pulseaudio-0.9.6/src/daemon/caps.c +=================================================================== +--- pulseaudio-0.9.6.orig/src/daemon/caps.c 2008-01-24 00:55:35.000000000 -0500 ++++ pulseaudio-0.9.6/src/daemon/caps.c 2008-01-24 00:56:00.000000000 -0500 +@@ -54,27 +54,36 @@ + #ifdef HAVE_GETUID + + /* Drop root rights when called SUID root */ +-void pa_drop_root(void) { ++int pa_drop_root(void) { + uid_t uid = getuid(); ++ int error = 0; + + if (uid == 0 || geteuid() != 0) +- return; ++ return 0; + + pa_log_info("dropping root rights."); + + #if defined(HAVE_SETRESUID) +- setresuid(uid, uid, uid); ++ error += setresuid(uid, uid, uid); + #elif defined(HAVE_SETREUID) +- setreuid(uid, uid); ++ error += setreuid(uid, uid); + #else +- setuid(uid); +- seteuid(uid); ++ error += setuid(uid); ++ error += seteuid(uid); + #endif ++ ++ if (error != 0) { ++ pa_log_error("Could not drop root priviliges."); ++ return -1; ++ } ++ ++ return 0; + } + + #else + +-void pa_drop_root(void) { ++int pa_drop_root(void) { ++ return 0; + } + + #endif +@@ -141,8 +150,7 @@ + } + + int pa_drop_caps(void) { +- pa_drop_root(); +- return 0; ++ return pa_drop_root(); + } + + #endif +Index: pulseaudio-0.9.6/src/daemon/caps.h +=================================================================== +--- pulseaudio-0.9.6.orig/src/daemon/caps.h 2008-01-24 00:55:44.000000000 -0500 ++++ pulseaudio-0.9.6/src/daemon/caps.h 2008-01-24 00:56:00.000000000 -0500 +@@ -24,7 +24,7 @@ + USA. + ***/ + +-void pa_drop_root(void); ++int pa_drop_root(void); + int pa_limit_caps(void); + int pa_drop_caps(void); + +Index: pulseaudio-0.9.6/src/daemon/main.c +=================================================================== +--- pulseaudio-0.9.6.orig/src/daemon/main.c 2008-01-24 00:55:52.000000000 -0500 ++++ pulseaudio-0.9.6/src/daemon/main.c 2008-01-24 00:56:00.000000000 -0500 +@@ -341,7 +341,8 @@ + if (pa_limit_caps() > 0) + /* We managed to drop capabilities except the needed + * ones. Hence we can drop the uid. */ +- pa_drop_root(); ++ if (pa_drop_root() < 0) ++ goto finish; + } + + setlocale(LC_ALL, ""); +@@ -349,7 +350,8 @@ + if (suid_root && (pa_own_uid_in_group(PA_REALTIME_GROUP, &gid) <= 0 || gid >= 1000)) { + pa_log_warn("WARNING: called SUID root, but not in group '"PA_REALTIME_GROUP"'."); + pa_drop_caps(); +- pa_drop_root(); ++ if (pa_drop_root() < 0) ++ goto finish; + suid_root = real_root = 0; + } + +@@ -390,7 +392,8 @@ + + if (suid_root) { + pa_drop_caps(); +- pa_drop_root(); ++ if (pa_drop_root() < 0) ++ goto finish; + } + + if (conf->dl_search_path)