utils: Fix lockfile path length issues

Message ID 20220323145044.1277801-1-richard.purdie@linuxfoundation.org
State Accepted, archived
Commit 89d70e7b71eecfe06592202f326e566c579ba01d
Headers show
Series utils: Fix lockfile path length issues | expand

Commit Message

Richard Purdie March 23, 2022, 2:50 p.m. UTC
If the path to bitbake.lock is in a deep directory, bitbake will hang. The
reason was that the max file length limiting code (to 255 chars) was including
the directory name and it should only act on the filename within the directory.
Fix it to just use the base filename.

[YOCTO #14766]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 lib/bb/utils.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Patch

diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index fcaeb99162..d11da978d7 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -453,13 +453,16 @@  def lockfile(name, shared=False, retry=True, block=False):
     consider the possibility of sending a signal to the process to break
     out - at which point you want block=True rather than retry=True.
     """
-    if len(name) > 255:
-        root, ext = os.path.splitext(name)
-        name = root[:255 - len(ext)] + ext
+    basename = os.path.basename(name)
+    if len(basename) > 255:
+        root, ext = os.path.splitext(basename)
+        basename = root[:255 - len(ext)] + ext
 
     dirname = os.path.dirname(name)
     mkdirhier(dirname)
 
+    name = os.path.join(dirname, basename)
+
     if not os.access(dirname, os.W_OK):
         logger.error("Unable to acquire lock '%s', directory is not writable",
                      name)