diff -Nru rsyslog-7.4.4/debian/changelog rsyslog-7.4.4/debian/changelog --- rsyslog-7.4.4/debian/changelog 2015-01-08 00:39:49.000000000 +0000 +++ rsyslog-7.4.4/debian/changelog 2015-01-13 19:39:53.000000000 +0000 @@ -1,3 +1,10 @@ +rsyslog (7.4.4-1ubuntu2.5) trusty; urgency=medium + + * Applied updated upstream patch fixing infinite loop on OpenVZ VMs. + (LP: #1366829) + + -- Paul Donohue Fri, 09 Jan 2015 10:50:36 -0500 + rsyslog (7.4.4-1ubuntu2.4) trusty-proposed; urgency=medium * Applied upstream patch fixing infinite loop on OpenVZ VMs. Thanks to Paul diff -Nru rsyslog-7.4.4/debian/patches/11-fix-infinite-loop-openvz-vms.patch rsyslog-7.4.4/debian/patches/11-fix-infinite-loop-openvz-vms.patch --- rsyslog-7.4.4/debian/patches/11-fix-infinite-loop-openvz-vms.patch 2015-01-05 18:52:43.000000000 +0000 +++ rsyslog-7.4.4/debian/patches/11-fix-infinite-loop-openvz-vms.patch 2015-01-13 19:39:21.000000000 +0000 @@ -1,29 +1,49 @@ -Description: bugfix imkmsg: infinite loop on OpenVZ VMs +Description: bugfix imkmsg, imklog: infinite loop on OpenVZ VMs Bug-Ubuntu: http://launchpad.net/bugs/1366829 Author: Paul Donohue -Applied-Upstream: commit 86904f96805d70fad6b4b1b90e06dcb8f789605c +Applied-Upstream: commit 86904f96805d70fad6b4b1b90e06dcb8f789605c, + commit 244d365f215b34babe287a3b36e722149d29b94c -Index: rsyslog-7.4.4/plugins/imkmsg/kmsg.c +Index: rsyslog.trusty/plugins/imkmsg/kmsg.c =================================================================== ---- rsyslog-7.4.4.orig/plugins/imkmsg/kmsg.c -+++ rsyslog-7.4.4/plugins/imkmsg/kmsg.c -@@ -157,6 +157,7 @@ submitSyslog(uchar *buf) +--- rsyslog.trusty.orig/plugins/imkmsg/kmsg.c ++++ rsyslog.trusty/plugins/imkmsg/kmsg.c +@@ -155,18 +155,41 @@ submitSyslog(uchar *buf) + /* open the kernel log - will be called inside the willRun() imkmsg entry point + */ rsRetVal - klogWillRun(modConfData_t *pModConf) +-klogWillRun(modConfData_t *pModConf) ++klogWillRunPrePrivDrop(modConfData_t *pModConf) { -+ int i; char errmsg[2048]; DEFiRet; -@@ -167,6 +168,16 @@ klogWillRun(modConfData_t *pModConf) + fklog = open(_PATH_KLOG, O_RDONLY, 0); + if (fklog < 0) { +- imkmsgLogIntMsg(RS_RET_ERR_OPEN_KLOG, "imkmsg: cannot open kernel log(%s): %s.", ++ imkmsgLogIntMsg(LOG_ERR, "imkmsg: cannot open kernel log (%s): %s.", + _PATH_KLOG, rs_strerror_r(errno, errmsg, sizeof(errmsg))); ABORT_FINALIZE(RS_RET_ERR_OPEN_KLOG); } -+ /* make sure the kernel log is readable */ -+ /* this normally returns EINVAL - on an OpenVZ VM, we get EBADF */ -+ i = read(fklog, NULL, 0); -+ if (i < 0 && errno == EBADF) { -+ imkmsgLogIntMsg(RS_RET_ERR_OPEN_KLOG, "imkmsg: cannot read kernel log(%s): %s.", ++finalize_it: ++ RETiRet; ++} ++ ++/* make sure the kernel log is readable after dropping privileges ++ */ ++rsRetVal ++klogWillRunPostPrivDrop(modConfData_t *pModConf) ++{ ++ char errmsg[2048]; ++ int r; ++ DEFiRet; ++ ++ /* this normally returns EINVAL */ ++ /* on an OpenVZ VM, we get EPERM */ ++ r = read(fklog, NULL, 0); ++ if (r < 0 && errno != EINVAL) { ++ imkmsgLogIntMsg(LOG_ERR, "imkmsg: cannot open kernel log (%s): %s.", + _PATH_KLOG, rs_strerror_r(errno, errmsg, sizeof(errmsg))); + fklog = -1; + ABORT_FINALIZE(RS_RET_ERR_OPEN_KLOG); @@ -32,10 +52,10 @@ finalize_it: RETiRet; } -Index: rsyslog-7.4.4/runtime/rsyslog.h +Index: rsyslog.trusty/runtime/rsyslog.h =================================================================== ---- rsyslog-7.4.4.orig/runtime/rsyslog.h -+++ rsyslog-7.4.4/runtime/rsyslog.h +--- rsyslog.trusty.orig/runtime/rsyslog.h ++++ rsyslog.trusty/runtime/rsyslog.h @@ -358,7 +358,7 @@ enum rsRetVal_ /** return value. All RS_RET_VAR_NOT_FOUND = -2142, /**< variable not found */ RS_RET_EMPTY_MSG = -2143, /**< provided (raw) MSG is empty */ @@ -45,3 +65,126 @@ RS_RET_ERR_AQ_CONLOG = -2146, /**< error aquiring console log (on solaris) */ RS_RET_ERR_DOOR = -2147, /**< some problems with handling the Solaris door functionality */ RS_RET_NO_SRCNAME_TPL = -2150, /**< sourcename template was not specified where one was needed (omudpspoof spoof addr) */ +Index: rsyslog.trusty/plugins/imklog/bsd.c +=================================================================== +--- rsyslog.trusty.orig/plugins/imklog/bsd.c ++++ rsyslog.trusty/plugins/imklog/bsd.c +@@ -164,7 +164,7 @@ static uchar *GetPath(modConfData_t *pMo + * entry point. -- rgerhards, 2008-04-09 + */ + rsRetVal +-klogWillRun(modConfData_t *pModConf) ++klogWillRunPrePrivDrop(modConfData_t *pModConf) + { + char errmsg[2048]; + int r; +@@ -172,7 +172,7 @@ klogWillRun(modConfData_t *pModConf) + + fklog = open((char*)GetPath(pModConf), O_RDONLY, 0); + if (fklog < 0) { +- imklogLogIntMsg(LOG_ERR, "imklog: cannot open kernel log(%s): %s.", ++ imklogLogIntMsg(LOG_ERR, "imklog: cannot open kernel log (%s): %s.", + GetPath(pModConf), rs_strerror_r(errno, errmsg, sizeof(errmsg))); + ABORT_FINALIZE(RS_RET_ERR_OPEN_KLOG); + } +@@ -192,6 +192,29 @@ klogWillRun(modConfData_t *pModConf) + + finalize_it: + RETiRet; ++} ++ ++/* make sure the kernel log is readable after dropping privileges ++ */ ++rsRetVal ++klogWillRunPostPrivDrop(modConfData_t *pModConf) ++{ ++ char errmsg[2048]; ++ int r; ++ DEFiRet; ++ ++ /* this normally returns EINVAL */ ++ /* on an OpenVZ VM, we get EPERM */ ++ r = read(fklog, NULL, 0); ++ if (r < 0 && errno != EINVAL) { ++ imklogLogIntMsg(LOG_ERR, "imklog: cannot open kernel log (%s): %s.", ++ GetPath(pModConf), rs_strerror_r(errno, errmsg, sizeof(errmsg))); ++ fklog = -1; ++ ABORT_FINALIZE(RS_RET_ERR_OPEN_KLOG); ++ } ++ ++finalize_it: ++ RETiRet; + } + + +Index: rsyslog.trusty/plugins/imklog/imklog.c +=================================================================== +--- rsyslog.trusty.orig/plugins/imklog/imklog.c ++++ rsyslog.trusty/plugins/imklog/imklog.c +@@ -382,7 +382,7 @@ ENDcheckCnf + BEGINactivateCnfPrePrivDrop + CODESTARTactivateCnfPrePrivDrop + runModConf = pModConf; +- iRet = klogWillRun(runModConf); ++ iRet = klogWillRunPrePrivDrop(runModConf); + ENDactivateCnfPrePrivDrop + + +@@ -398,6 +398,7 @@ ENDfreeCnf + + BEGINwillRun + CODESTARTwillRun ++ iRet = klogWillRunPostPrivDrop(runModConf); + ENDwillRun + + +Index: rsyslog.trusty/plugins/imklog/imklog.h +=================================================================== +--- rsyslog.trusty.orig/plugins/imklog/imklog.h ++++ rsyslog.trusty/plugins/imklog/imklog.h +@@ -48,8 +48,9 @@ struct modConfData_s { + * rgerhards, 2008-04-09 + */ + rsRetVal klogLogKMsg(modConfData_t *pModConf); +-rsRetVal klogWillRun(modConfData_t *pModConf); + rsRetVal klogAfterRun(modConfData_t *pModConf); ++rsRetVal klogWillRunPrePrivDrop(modConfData_t *pModConf); ++rsRetVal klogWillRunPostPrivDrop(modConfData_t *pModConf); + int klogFacilIntMsg(); + + /* the functions below may be called by the drivers */ +Index: rsyslog.trusty/plugins/imkmsg/imkmsg.c +=================================================================== +--- rsyslog.trusty.orig/plugins/imkmsg/imkmsg.c ++++ rsyslog.trusty/plugins/imkmsg/imkmsg.c +@@ -209,7 +209,7 @@ ENDcheckCnf + BEGINactivateCnfPrePrivDrop + CODESTARTactivateCnfPrePrivDrop + runModConf = pModConf; +- iRet = klogWillRun(runModConf); ++ iRet = klogWillRunPrePrivDrop(runModConf); + ENDactivateCnfPrePrivDrop + + +@@ -225,6 +225,7 @@ ENDfreeCnf + + BEGINwillRun + CODESTARTwillRun ++ iRet = klogWillRunPostPrivDrop(runModConf); + ENDwillRun + + +Index: rsyslog.trusty/plugins/imkmsg/imkmsg.h +=================================================================== +--- rsyslog.trusty.orig/plugins/imkmsg/imkmsg.h ++++ rsyslog.trusty/plugins/imkmsg/imkmsg.h +@@ -42,7 +42,8 @@ struct modConfData_s { + * rgerhards, 2008-04-09 + */ + rsRetVal klogLogKMsg(modConfData_t *pModConf); +-rsRetVal klogWillRun(modConfData_t *pModConf); ++rsRetVal klogWillRunPrePrivDrop(modConfData_t *pModConf); ++rsRetVal klogWillRunPostPrivDrop(modConfData_t *pModConf); + rsRetVal klogAfterRun(modConfData_t *pModConf); + int klogFacilIntMsg(); +