2
# Copyright (C) 2009, Canonical, Ltd.
3
# Author: Kees Cook <kees@ubuntu.com>
6
# Attempt to sanitize the dd arguments, even though this still allows for arbitrary read/write
12
print >>sys.stderr, "Invalid arguments"
16
for arg in sys.argv[1:]:
17
for opt in ['if','of']:
18
if arg.startswith(opt+'='):
20
print >>sys.stderr, "Option '%s' repeated" % (opt)
22
opts.setdefault(opt,arg.split('=',1)[1])
23
if 'if' not in opts or 'of' not in opts:
24
print >>sys.stderr, "Missing 'if' or 'of' arguments"
28
# - /dev/zero -> anywhere
29
# - devmapper -> anywhere
30
# - anywhere -> devmapper
31
if opts['if'] != '/dev/zero':
34
for device in [opts['if'], opts['of']]:
39
for dm in glob.glob('/dev/mapper/*'):
40
if dm.endswith('/control'):
42
if os.stat(dm).st_rdev == src.st_rdev:
49
print >>sys.stderr, "Source is not /dev/zero or source/target is not a devmapper device"
52
args = ['/bin/dd'] + sys.argv[1:]
53
os.execl('/bin/dd', *args)