Okay, I can confirm this would appear to fix the problem.
Test procedure:
1. Log in remotely to the affected machine using ssh, run the following command:
$ sudo watch ls -l /proc/$( pidof gdm-binary )/fd
2. Start a remote X session with that host (through Xnest, plain X, whatever)... observe that new files are opened.
3. Close the X session, observe that the files are not removed from the list. In my case, this looked like this:
Vanilla Ubuntu gdm build. After initial start-up.
total 0 lrwx------ 1 root root 64 2012-09-20 14:34 0 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:34 1 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:34 2 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:34 3 -> socket:[78942] lr-x------ 1 root root 64 2012-09-20 14:34 4 -> pipe:[78945] l-wx------ 1 root root 64 2012-09-20 14:34 5 -> pipe:[78945] lr-x------ 1 root root 64 2012-09-20 14:34 6 -> inotify lr-x------ 1 root root 64 2012-09-20 14:34 7 -> pipe:[78952] l-wx------ 1 root root 64 2012-09-20 14:34 8 -> pipe:[78952] lrwx------ 1 root root 64 2012-09-20 14:34 9 -> /var/run/gdm/auth-for-gdm-omI8J6/database lr-x------ 1 root root 64 2012-09-20 14:34 10 -> pipe:[78971] l-wx------ 1 root root 64 2012-09-20 14:34 11 -> pipe:[78971] lr-x------ 1 root root 64 2012-09-20 14:34 12 -> pipe:[78937] lrwx------ 1 root root 64 2012-09-20 14:34 13 -> socket:[78973] lrwx------ 1 root root 64 2012-09-20 14:34 14 -> socket:[78974]
After a few logins...
total 0 lrwx------ 1 root root 64 2012-09-20 14:38 0 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:38 1 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:38 2 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:38 3 -> socket:[78942] lr-x------ 1 root root 64 2012-09-20 14:38 4 -> pipe:[78945] l-wx------ 1 root root 64 2012-09-20 14:38 5 -> pipe:[78945] lr-x------ 1 root root 64 2012-09-20 14:38 6 -> inotify lr-x------ 1 root root 64 2012-09-20 14:38 7 -> pipe:[78952] l-wx------ 1 root root 64 2012-09-20 14:38 8 -> pipe:[78952] lrwx------ 1 root root 64 2012-09-20 14:38 9 -> /var/run/gdm/auth-for-gdm-omI8J6/database lr-x------ 1 root root 64 2012-09-20 14:38 10 -> pipe:[78971] l-wx------ 1 root root 64 2012-09-20 14:38 11 -> pipe:[78971] lr-x------ 1 root root 64 2012-09-20 14:38 12 -> pipe:[78937] lrwx------ 1 root root 64 2012-09-20 14:38 13 -> socket:[78973] lrwx------ 1 root root 64 2012-09-20 14:38 14 -> socket:[78974] lrwx------ 1 root root 64 2012-09-20 14:38 15 -> /var/run/gdm/auth-for-gdm-bqKAEb/database lrwx------ 1 root root 64 2012-09-20 14:38 16 -> /var/run/gdm/auth-for-gdm-QC37Jk/database lrwx------ 1 root root 64 2012-09-20 14:38 17 -> /var/run/gdm/auth-for-vrtadmin-4oPw6L/database lrwx------ 1 root root 64 2012-09-20 14:38 18 -> /var/run/gdm/auth-for-gdm-ePg83T/database lrwx------ 1 root root 64 2012-09-20 14:38 19 -> /var/run/gdm/auth-for-vrtadmin-YMcsem/database
Now, build gdm with the given patch here, re-start gdm, and try again with the same procedure. In my case, I see:
Patched gdm build. After initial start-up.
total 0 lrwx------ 1 root root 64 2012-09-20 14:49 0 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:49 1 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:49 2 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:49 3 -> socket:[102450] lr-x------ 1 root root 64 2012-09-20 14:49 4 -> pipe:[102453] l-wx------ 1 root root 64 2012-09-20 14:49 5 -> pipe:[102453] lr-x------ 1 root root 64 2012-09-20 14:49 6 -> inotify lr-x------ 1 root root 64 2012-09-20 14:49 7 -> pipe:[102460] l-wx------ 1 root root 64 2012-09-20 14:49 8 -> pipe:[102460] lrwx------ 1 root root 64 2012-09-20 14:49 9 -> /var/run/gdm/auth-for-gdm-kjZfwe/database lr-x------ 1 root root 64 2012-09-20 14:49 10 -> pipe:[102479] l-wx------ 1 root root 64 2012-09-20 14:49 11 -> pipe:[102479] lr-x------ 1 root root 64 2012-09-20 14:49 12 -> pipe:[102445] lrwx------ 1 root root 64 2012-09-20 14:49 13 -> socket:[102481] lrwx------ 1 root root 64 2012-09-20 14:49 14 -> socket:[102482]
During a remote X session total 0 lrwx------ 1 root root 64 2012-09-20 14:51 0 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:51 1 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:51 2 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:51 3 -> socket:[102450] lr-x------ 1 root root 64 2012-09-20 14:51 4 -> pipe:[102453] l-wx------ 1 root root 64 2012-09-20 14:51 5 -> pipe:[102453] lr-x------ 1 root root 64 2012-09-20 14:51 6 -> inotify lr-x------ 1 root root 64 2012-09-20 14:51 7 -> pipe:[102460] l-wx------ 1 root root 64 2012-09-20 14:51 8 -> pipe:[102460] lrwx------ 1 root root 64 2012-09-20 14:51 9 -> /var/run/gdm/auth-for-gdm-kjZfwe/database lr-x------ 1 root root 64 2012-09-20 14:51 10 -> pipe:[102479] l-wx------ 1 root root 64 2012-09-20 14:51 11 -> pipe:[102479] lr-x------ 1 root root 64 2012-09-20 14:51 12 -> pipe:[102445] lrwx------ 1 root root 64 2012-09-20 14:51 13 -> socket:[102481] lrwx------ 1 root root 64 2012-09-20 14:51 14 -> socket:[102482] lrwx------ 1 root root 64 2012-09-20 14:51 15 -> /var/run/gdm/auth-for-gdm-CM7Tt4/database
After the remote session terminates. total 0 lrwx------ 1 root root 64 2012-09-20 14:51 0 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:51 1 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:51 2 -> /dev/null lrwx------ 1 root root 64 2012-09-20 14:51 3 -> socket:[102450] lr-x------ 1 root root 64 2012-09-20 14:51 4 -> pipe:[102453] l-wx------ 1 root root 64 2012-09-20 14:51 5 -> pipe:[102453] lr-x------ 1 root root 64 2012-09-20 14:51 6 -> inotify lr-x------ 1 root root 64 2012-09-20 14:51 7 -> pipe:[102460] l-wx------ 1 root root 64 2012-09-20 14:51 8 -> pipe:[102460] lrwx------ 1 root root 64 2012-09-20 14:51 9 -> /var/run/gdm/auth-for-gdm-kjZfwe/database lr-x------ 1 root root 64 2012-09-20 14:51 10 -> pipe:[102479] l-wx------ 1 root root 64 2012-09-20 14:51 11 -> pipe:[102479] lr-x------ 1 root root 64 2012-09-20 14:51 12 -> pipe:[102445] lrwx------ 1 root root 64 2012-09-20 14:51 13 -> socket:[102481] lrwx------ 1 root root 64 2012-09-20 14:51 14 -> socket:[102482]
For those who get this problem and want a package; download the patch, then:
$ sudo apt-get build-dep gdm $ apt-get source gdm $ cd gdm-2.30.2.is.20.30.0 $ cp ../gdm-2.30.2.is.2.30.0-filehandle-fix.diff debian/patches/ $ dpkg-buildpackage
Okay, I can confirm this would appear to fix the problem.
Test procedure:
1. Log in remotely to the affected machine using ssh, run the following command:
$ sudo watch ls -l /proc/$( pidof gdm-binary )/fd
2. Start a remote X session with that host (through Xnest, plain X, whatever)... observe that new files are opened.
3. Close the X session, observe that the files are not removed from the list. In my case, this looked like this:
Vanilla Ubuntu gdm build.
After initial start-up.
total 0 gdm/auth- for-gdm- omI8J6/ database
lrwx------ 1 root root 64 2012-09-20 14:34 0 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:34 1 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:34 2 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:34 3 -> socket:[78942]
lr-x------ 1 root root 64 2012-09-20 14:34 4 -> pipe:[78945]
l-wx------ 1 root root 64 2012-09-20 14:34 5 -> pipe:[78945]
lr-x------ 1 root root 64 2012-09-20 14:34 6 -> inotify
lr-x------ 1 root root 64 2012-09-20 14:34 7 -> pipe:[78952]
l-wx------ 1 root root 64 2012-09-20 14:34 8 -> pipe:[78952]
lrwx------ 1 root root 64 2012-09-20 14:34 9 -> /var/run/
lr-x------ 1 root root 64 2012-09-20 14:34 10 -> pipe:[78971]
l-wx------ 1 root root 64 2012-09-20 14:34 11 -> pipe:[78971]
lr-x------ 1 root root 64 2012-09-20 14:34 12 -> pipe:[78937]
lrwx------ 1 root root 64 2012-09-20 14:34 13 -> socket:[78973]
lrwx------ 1 root root 64 2012-09-20 14:34 14 -> socket:[78974]
After a few logins...
total 0 gdm/auth- for-gdm- omI8J6/ database gdm/auth- for-gdm- bqKAEb/ database gdm/auth- for-gdm- QC37Jk/ database gdm/auth- for-vrtadmin- 4oPw6L/ database gdm/auth- for-gdm- ePg83T/ database gdm/auth- for-vrtadmin- YMcsem/ database
lrwx------ 1 root root 64 2012-09-20 14:38 0 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:38 1 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:38 2 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:38 3 -> socket:[78942]
lr-x------ 1 root root 64 2012-09-20 14:38 4 -> pipe:[78945]
l-wx------ 1 root root 64 2012-09-20 14:38 5 -> pipe:[78945]
lr-x------ 1 root root 64 2012-09-20 14:38 6 -> inotify
lr-x------ 1 root root 64 2012-09-20 14:38 7 -> pipe:[78952]
l-wx------ 1 root root 64 2012-09-20 14:38 8 -> pipe:[78952]
lrwx------ 1 root root 64 2012-09-20 14:38 9 -> /var/run/
lr-x------ 1 root root 64 2012-09-20 14:38 10 -> pipe:[78971]
l-wx------ 1 root root 64 2012-09-20 14:38 11 -> pipe:[78971]
lr-x------ 1 root root 64 2012-09-20 14:38 12 -> pipe:[78937]
lrwx------ 1 root root 64 2012-09-20 14:38 13 -> socket:[78973]
lrwx------ 1 root root 64 2012-09-20 14:38 14 -> socket:[78974]
lrwx------ 1 root root 64 2012-09-20 14:38 15 -> /var/run/
lrwx------ 1 root root 64 2012-09-20 14:38 16 -> /var/run/
lrwx------ 1 root root 64 2012-09-20 14:38 17 -> /var/run/
lrwx------ 1 root root 64 2012-09-20 14:38 18 -> /var/run/
lrwx------ 1 root root 64 2012-09-20 14:38 19 -> /var/run/
Now, build gdm with the given patch here, re-start gdm, and try again with the same procedure. In my case, I see:
Patched gdm build.
After initial start-up.
total 0 gdm/auth- for-gdm- kjZfwe/ database
lrwx------ 1 root root 64 2012-09-20 14:49 0 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:49 1 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:49 2 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:49 3 -> socket:[102450]
lr-x------ 1 root root 64 2012-09-20 14:49 4 -> pipe:[102453]
l-wx------ 1 root root 64 2012-09-20 14:49 5 -> pipe:[102453]
lr-x------ 1 root root 64 2012-09-20 14:49 6 -> inotify
lr-x------ 1 root root 64 2012-09-20 14:49 7 -> pipe:[102460]
l-wx------ 1 root root 64 2012-09-20 14:49 8 -> pipe:[102460]
lrwx------ 1 root root 64 2012-09-20 14:49 9 -> /var/run/
lr-x------ 1 root root 64 2012-09-20 14:49 10 -> pipe:[102479]
l-wx------ 1 root root 64 2012-09-20 14:49 11 -> pipe:[102479]
lr-x------ 1 root root 64 2012-09-20 14:49 12 -> pipe:[102445]
lrwx------ 1 root root 64 2012-09-20 14:49 13 -> socket:[102481]
lrwx------ 1 root root 64 2012-09-20 14:49 14 -> socket:[102482]
During a remote X session gdm/auth- for-gdm- kjZfwe/ database gdm/auth- for-gdm- CM7Tt4/ database
total 0
lrwx------ 1 root root 64 2012-09-20 14:51 0 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:51 1 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:51 2 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:51 3 -> socket:[102450]
lr-x------ 1 root root 64 2012-09-20 14:51 4 -> pipe:[102453]
l-wx------ 1 root root 64 2012-09-20 14:51 5 -> pipe:[102453]
lr-x------ 1 root root 64 2012-09-20 14:51 6 -> inotify
lr-x------ 1 root root 64 2012-09-20 14:51 7 -> pipe:[102460]
l-wx------ 1 root root 64 2012-09-20 14:51 8 -> pipe:[102460]
lrwx------ 1 root root 64 2012-09-20 14:51 9 -> /var/run/
lr-x------ 1 root root 64 2012-09-20 14:51 10 -> pipe:[102479]
l-wx------ 1 root root 64 2012-09-20 14:51 11 -> pipe:[102479]
lr-x------ 1 root root 64 2012-09-20 14:51 12 -> pipe:[102445]
lrwx------ 1 root root 64 2012-09-20 14:51 13 -> socket:[102481]
lrwx------ 1 root root 64 2012-09-20 14:51 14 -> socket:[102482]
lrwx------ 1 root root 64 2012-09-20 14:51 15 -> /var/run/
After the remote session terminates. gdm/auth- for-gdm- kjZfwe/ database
total 0
lrwx------ 1 root root 64 2012-09-20 14:51 0 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:51 1 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:51 2 -> /dev/null
lrwx------ 1 root root 64 2012-09-20 14:51 3 -> socket:[102450]
lr-x------ 1 root root 64 2012-09-20 14:51 4 -> pipe:[102453]
l-wx------ 1 root root 64 2012-09-20 14:51 5 -> pipe:[102453]
lr-x------ 1 root root 64 2012-09-20 14:51 6 -> inotify
lr-x------ 1 root root 64 2012-09-20 14:51 7 -> pipe:[102460]
l-wx------ 1 root root 64 2012-09-20 14:51 8 -> pipe:[102460]
lrwx------ 1 root root 64 2012-09-20 14:51 9 -> /var/run/
lr-x------ 1 root root 64 2012-09-20 14:51 10 -> pipe:[102479]
l-wx------ 1 root root 64 2012-09-20 14:51 11 -> pipe:[102479]
lr-x------ 1 root root 64 2012-09-20 14:51 12 -> pipe:[102445]
lrwx------ 1 root root 64 2012-09-20 14:51 13 -> socket:[102481]
lrwx------ 1 root root 64 2012-09-20 14:51 14 -> socket:[102482]
For those who get this problem and want a package; download the patch, then:
$ sudo apt-get build-dep gdm 2.is.20. 30.0 2.30.2. is.2.30. 0-filehandle- fix.diff debian/patches/
$ apt-get source gdm
$ cd gdm-2.30.
$ cp ../gdm-
$ dpkg-buildpackage