mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
pygrub: Properly quote results, when returning them to the caller:
* When the caller wants sexpr output, use `repr()'
This is what Xend expects.
The returned S-expressions are now escaped and quoted by Python,
generally using '...'. Previously kernel and ramdisk were unquoted
and args was quoted with "..." but without proper escaping. This
change may break toolstacks which do not properly dequote the
returned S-expressions.
* When the caller wants "simple" output, crash if the delimiter is
contained in the returned value.
With --output-format=simple it does not seem like this could ever
happen, because the bootloader config parsers all take line-based
input from the various bootloader config files.
With --output-format=simple0, this can happen if the bootloader
config file contains nul bytes.
This is CVE-2016-9379 and CVE-2016-9380 / XSA-198.
Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Tested-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: 27e14d346e
master date: 2016-11-22 13:52:09 +0100
This commit is contained in:
1 parent
a6b0650d85
commit
206fc7084d
1 file changed
+6
-3
@@ -721,14 +721,17 @@ def sniff_netware(fs, cfg):
|
||||
return cfg
|
||||
|
||||
def format_sxp(kernel, ramdisk, args):
|
||||
s = "linux (kernel %s)" % kernel
|
||||
s = "linux (kernel %s)" % repr(kernel)
|
||||
if ramdisk:
|
||||
s += "(ramdisk %s)" % ramdisk
|
||||
s += "(ramdisk %s)" % repr(ramdisk)
|
||||
if args:
|
||||
s += "(args \"%s\")" % args
|
||||
s += "(args %s)" % repr(args)
|
||||
return s
|
||||
|
||||
def format_simple(kernel, ramdisk, args, sep):
|
||||
for check in (kernel, ramdisk, args):
|
||||
if check is not None and sep in check:
|
||||
raise RuntimeError, "simple format cannot represent delimiter-containing value"
|
||||
s = ("kernel %s" % kernel) + sep
|
||||
if ramdisk:
|
||||
s += ("ramdisk %s" % ramdisk) + sep
|
||||
|
||||