[Bug 1778547] Re: Broken system lock counting
Julian Andres Klode
1778547 at bugs.launchpad.net
Tue Jun 26 07:35:33 UTC 2018
** Description changed:
[Impact]
System lock unrefing is broken, off-by-one error. Locking twice opens a second fd for the lock file, and the old fd gets lost and remains open for the remaining duration of the program
[Test case]
- TODO
+
+ Executing the following script should show one lock file in the first
+ line, and none in the last line.
+
+ def maybe_readlink(path):
+ try:
+ return os.readlink("/proc/self/fd/" + p)
+ except:
+ return "<deleted>"
+
+ import os, apt_pkg
+ apt_pkg.init()
+ apt_pkg.pkgsystem_lock()
+ apt_pkg.pkgsystem_lock()
+ apt_pkg.pkgsystem_unlock()
+ apt_pkg.pkgsystem_unlock()
+ print([(p, maybe_readlink("/proc/self/fd/" + p)) for p in os.listdir("/proc/self/fd")])
+
+
+ [Test output]
+ good, cosmic:
+ [('0', '/dev/pts/2'), ('1', '/dev/pts/2'), ('2', '/dev/pts/2'), ('3', '/var/lib/dpkg/lock'), ('4', '<deleted>')]
+ [('0', '/dev/pts/2'), ('1', '/dev/pts/2'), ('2', '/dev/pts/2'), ('3', '<deleted>')]
+
+ bad, bionic:
+ [('0', '/dev/pts/0'), ('1', '/dev/pts/0'), ('2', '/dev/pts/0'), ('3', 'pipe:[40889331]'), ('4', '/var/lib/dpkg/lock'), ('5', '/var/lib/dpkg/lock'), ('6', '<deleted>'), ('17', 'socket:[53931]')]
+ [('0', '/dev/pts/0'), ('1', '/dev/pts/0'), ('2', '/dev/pts/0'), ('3', 'pipe:[40889331]'), ('4', '/var/lib/dpkg/lock'), ('5', '<deleted>'), ('17', 'socket:[53931]')]
+
[Regression potential]
- TODO
+ A locking change can potentially break locking, but this one seems like an obvious off-by-one error.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to apt in Ubuntu.
https://bugs.launchpad.net/bugs/1778547
Title:
Broken system lock counting
Status in apt package in Ubuntu:
Fix Committed
Status in apt source package in Xenial:
Confirmed
Status in apt source package in Artful:
Confirmed
Status in apt source package in Bionic:
Triaged
Bug description:
[Impact]
System lock unrefing is broken, off-by-one error. Locking twice opens a second fd for the lock file, and the old fd gets lost and remains open for the remaining duration of the program
[Test case]
Executing the following script should show one lock file in the first
line, and none in the last line.
def maybe_readlink(path):
try:
return os.readlink("/proc/self/fd/" + p)
except:
return "<deleted>"
import os, apt_pkg
apt_pkg.init()
apt_pkg.pkgsystem_lock()
apt_pkg.pkgsystem_lock()
apt_pkg.pkgsystem_unlock()
apt_pkg.pkgsystem_unlock()
print([(p, maybe_readlink("/proc/self/fd/" + p)) for p in os.listdir("/proc/self/fd")])
[Test output]
good, cosmic:
[('0', '/dev/pts/2'), ('1', '/dev/pts/2'), ('2', '/dev/pts/2'), ('3', '/var/lib/dpkg/lock'), ('4', '<deleted>')]
[('0', '/dev/pts/2'), ('1', '/dev/pts/2'), ('2', '/dev/pts/2'), ('3', '<deleted>')]
bad, bionic:
[('0', '/dev/pts/0'), ('1', '/dev/pts/0'), ('2', '/dev/pts/0'), ('3', 'pipe:[40889331]'), ('4', '/var/lib/dpkg/lock'), ('5', '/var/lib/dpkg/lock'), ('6', '<deleted>'), ('17', 'socket:[53931]')]
[('0', '/dev/pts/0'), ('1', '/dev/pts/0'), ('2', '/dev/pts/0'), ('3', 'pipe:[40889331]'), ('4', '/var/lib/dpkg/lock'), ('5', '<deleted>'), ('17', 'socket:[53931]')]
[Regression potential]
A locking change can potentially break locking, but this one seems like an obvious off-by-one error.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1778547/+subscriptions
More information about the foundations-bugs
mailing list