]> code.ossystems Code Review - openembedded-core.git/commitdiff
meta: Fix return value checks from subprocess.call()'s
authorMikko Rapeli <mikko.rapeli@bmw.de>
Thu, 22 Jun 2017 13:23:14 +0000 (16:23 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 28 Jun 2017 19:54:52 +0000 (20:54 +0100)
Python function subprocess.call() returns the return value of the
executed process. If return values are not checked, errors may
go unnoticed and bad things can happen.

Change all callers of subprocess.call() which do not check for
the return value to use subprocess.check_call() which raises
CalledProcessError if the subprocess returns with non-zero value.

https://docs.python.org/2/library/subprocess.html#using-the-subprocess-module

All users of the function were found with:

$ git grep "subprocess\.call" | \
  egrep -v 'if.*subprocess\.call|=\ +subprocess\.call|return.*subprocess\.call'

Tested similar patch on top of yocto jethro. Only compile tested
core-image-minimal on poky master branch.

Signed-off-by: Mikko Rapeli <mikko.rapeli@bmw.de>
Signed-off-by: Ross Burton <ross.burton@intel.com>
meta/classes/cml1.bbclass
meta/classes/kernel-module-split.bbclass
meta/classes/sstate.bbclass
meta/lib/oeqa/utils/buildproject.py
meta/lib/oeqa/utils/targetbuild.py

index 38e6613c486d1ed9c1f9bb988841ec1e306668f6..eb8e7907f602cb038e6ac69ffbe4c51fb064ecee 100644 (file)
@@ -63,7 +63,7 @@ python do_diffconfig() {
 
     if isdiff:
         statement = 'diff --unchanged-line-format= --old-line-format= --new-line-format="%L" ' + configorig + ' ' + config + '>' + fragment
-        subprocess.call(statement, shell=True)
+        subprocess.check_call(statement, shell=True)
 
         shutil.copy(configorig, config)
 
index 5e10dcf735ce271a751d8f49cd96c355e663a0f7..1035525dacbc5cf8e9f582cd86413cdda583087f 100644 (file)
@@ -47,7 +47,7 @@ python split_kernel_module_packages () {
         tf = tempfile.mkstemp()
         tmpfile = tf[1]
         cmd = "%sobjcopy -j .modinfo -O binary %s %s" % (d.getVar("HOST_PREFIX") or "", file, tmpfile)
-        subprocess.call(cmd, shell=True)
+        subprocess.check_call(cmd, shell=True)
         f = open(tmpfile)
         l = f.read().split("\000")
         f.close()
index 0a12935be9323af26cc3de936f083b4f9b6da937..f446c3df028d2dadbe0c2e1b53be179699a45486 100644 (file)
@@ -404,7 +404,7 @@ python sstate_hardcode_path_unpack () {
             return
 
         bb.note("Replacing fixme paths in sstate package: %s" % (sstate_hardcode_cmd))
-        subprocess.call(sstate_hardcode_cmd, shell=True)
+        subprocess.check_call(sstate_hardcode_cmd, shell=True)
 
         # Need to remove this or we'd copy it into the target directory and may 
         # conflict with another writer
@@ -453,7 +453,7 @@ def sstate_clean_manifest(manifest, d, prefix=None):
     if os.path.exists(manifest + ".postrm"):
         import subprocess
         os.chmod(postrm, 0o755)
-        subprocess.call(postrm, shell=True)
+        subprocess.check_call(postrm, shell=True)
         oe.path.remove(postrm)
 
     oe.path.remove(manifest)
index 487f08be496b22c58e6973bf1b11b5340acc797d..721f35d996e81e503964c4c0415dc58d389152d9 100644 (file)
@@ -52,4 +52,4 @@ class BuildProject(metaclass=ABCMeta):
 
     def clean(self):
         self._run('rm -rf %s' % self.targetdir)
-        subprocess.call('rm -f %s' % self.localarchive, shell=True)
+        subprocess.check_call('rm -f %s' % self.localarchive, shell=True)
index 9249fa26359f7e5176c7fc8b371c5ea398616090..1202d579fb0e296a77b5c92fb7793b05b797b05a 100644 (file)
@@ -69,7 +69,7 @@ class BuildProject(metaclass=ABCMeta):
 
     def clean(self):
         self._run('rm -rf %s' % self.targetdir)
-        subprocess.call('rm -f %s' % self.localarchive, shell=True)
+        subprocess.check_call('rm -f %s' % self.localarchive, shell=True)
         pass
 
 class TargetBuildProject(BuildProject):
@@ -136,4 +136,4 @@ class SDKBuildProject(BuildProject):
 
     def _run(self, cmd):
         self.log("Running . %s; " % self.sdkenv + cmd)
-        return subprocess.call(". %s; " % self.sdkenv + cmd, shell=True)
+        return subprocess.check_call(". %s; " % self.sdkenv + cmd, shell=True)