diff options
Diffstat (limited to 'app-emulation/xen-tools/files/xen-tools-3.0.4_p1-pygrub-security-fix.patch')
-rw-r--r-- | app-emulation/xen-tools/files/xen-tools-3.0.4_p1-pygrub-security-fix.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/app-emulation/xen-tools/files/xen-tools-3.0.4_p1-pygrub-security-fix.patch b/app-emulation/xen-tools/files/xen-tools-3.0.4_p1-pygrub-security-fix.patch new file mode 100644 index 000000000000..73432d412faf --- /dev/null +++ b/app-emulation/xen-tools/files/xen-tools-3.0.4_p1-pygrub-security-fix.patch @@ -0,0 +1,75 @@ +Protect pygrub from possible malicious content in guest grub +config file. This fixes CVE-2007-4993. Original patch from +Jeremy Katz, I updated to close 2 remaining issues pointed out +by Christian and Keir, and to use setattr(self, ...). + +Signed-off-by: Chris Wright <chrisw@sous-sol.org> + +(Tweeked for Xen 3.0.4) +--- +diff -r a00cc97b392a tools/pygrub/src/GrubConf.py +--- a/tools/pygrub/src/GrubConf.py Wed Sep 12 09:43:33 2007 +0100 ++++ b/tools/pygrub/src/GrubConf.py Mon Sep 24 12:43:19 2007 -0700 +@@ -101,7 +101,7 @@ class GrubImage(object): + + if self.commands.has_key(com): + if self.commands[com] is not None: +- exec("%s = r\"%s\"" %(self.commands[com], arg.strip())) ++ setattr(self, self.commands[com], arg.strip()) + else: + logging.info("Ignored image directive %s" %(com,)) + else: +@@ -142,11 +142,11 @@ class GrubImage(object): + initrd = property(get_initrd, set_initrd) + + # set up command handlers +- commands = { "title": "self.title", +- "root": "self.root", +- "rootnoverify": "self.root", +- "kernel": "self.kernel", +- "initrd": "self.initrd", ++ commands = { "title": "title", ++ "root": "root", ++ "rootnoverify": "root", ++ "kernel": "kernel", ++ "initrd": "initrd", + "chainloader": None, + "module": None} + +@@ -195,7 +195,7 @@ class GrubConfigFile(object): + (com, arg) = grub_exact_split(l, 2) + if self.commands.has_key(com): + if self.commands[com] is not None: +- exec("%s = r\"%s\"" %(self.commands[com], arg.strip())) ++ setattr(self, self.commands[com], arg.strip()) + else: + logging.info("Ignored directive %s" %(com,)) + else: +@@ -208,7 +208,7 @@ class GrubConfigFile(object): + (com, arg) = grub_exact_split(line, 2) + if self.commands.has_key(com): + if self.commands[com] is not None: +- exec("%s = r\"%s\"" %(self.commands[com], arg.strip())) ++ setattr(self, self.commands[com], arg.strip()) + else: + logging.info("Ignored directive %s" %(com,)) + else: +@@ -236,12 +236,12 @@ class GrubConfigFile(object): + splash = property(get_splash, set_splash) + + # set up command handlers +- commands = { "default": "self.default", +- "timeout": "self.timeout", +- "fallback": "self.fallback", +- "hiddenmenu": "self.hiddenmenu", +- "splashimage": "self.splash", +- "password": "self.password" } ++ commands = { "default": "default", ++ "timeout": "timeout", ++ "fallback": "fallback", ++ "hiddenmenu": "hiddenmenu", ++ "splashimage": "splash", ++ "password": "password" } + for c in ("bootp", "color", "device", "dhcp", "hide", "ifconfig", + "pager", "partnew", "parttype", "rarp", "serial", + "setkey", "terminal", "terminfo", "tftpserver", "unhide"): |