This appears to be caused by pam_mount.c::pam_sm_close_session().

When there are no volume list items the code that explicitly gets the
user name is skipped over:

if (Config.volume_list.items == 0) {
                w4rn("No volumes to umount\n");
                goto out;
        }

which results in Config.user not being set (its default value is NULL)
which causes the assert() in modify_pm_count.

 out:
        envpath_init(Config.path);
        if (modify_pm_count(&Config, Config.user, "-1") > 0)

----
$ sudo sed -i 's/\(pam_mount.so\)/\1 debug/' 
/etc/pam.d/common-session-noninteractive

$ sudo LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb -x 
/home/tj/gdb-sudo.cmd --args sudo echo TEST
sudo: /etc/sudoers.d/timestamp is mode 0644, but should be 0440
pam_mount(pam_mount.c:553): pam_mount 2.10: entering session stage
pam_mount(misc.c:38): Session open: (ruid/rgid=1000/1000, e=0/1000)
pam_mount(pam_mount.c:614): no volumes to mount
command: 'pmvarrun' '-u' 'root' '-o' '1' 
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=1000/1000, e=0/1000)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/1000, e=0/1000)
pmvarrun(pmvarrun.c:252): parsed count value 98
pam_mount(pam_mount.c:440): pmvarrun says login count is 99
pam_mount(pam_mount.c:645): done opening session (ret=0)

GNU gdb (Ubuntu/Linaro 7.4-2012.02-0ubuntu2) 7.4-2012.02
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /usr/bin/sudo...Reading symbols from 
/usr/lib/debug/usr/bin/sudo...done.
done.
Function "pam_begin_session" not defined.
Breakpoint 1 (pam_begin_session) pending.
Function "pam_end_session" not defined.
Breakpoint 2 (pam_end_session) pending.
Function "pam_sm_close_session" not defined.
Breakpoint 3 (pam_sm_close_session) pending.
Function "modify_pm_count" not defined.
Breakpoint 4 (modify_pm_count) pending.
(gdb) run
Starting program: /usr/bin/sudo echo TEST
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
sudo: /etc/sudoers.d/timestamp is mode 0644, but should be 0440
pam_mount(pam_mount.c:553): pam_mount 2.10: entering session stage
pam_mount(misc.c:38): Session open: (ruid/rgid=0/0, e=0/0)
pam_mount(pam_mount.c:614): no volumes to mount
command: 'pmvarrun' '-u' 'root' '-o' '1' 
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pmvarrun(pmvarrun.c:252): parsed count value 99
pam_mount(pam_mount.c:440): pmvarrun says login count is 100
pam_mount(pam_mount.c:645): done opening session (ret=0)
TEST

Breakpoint 2, pam_end_session (pw=0x20fa938, auth=0x7fc7cbf4a620) at 
/build/buildd/sudo-1.8.3p1/plugins/sudoers/auth/pam.c:243
243     {
(gdb) n
246         if (pamh != NULL) {
(gdb) n
252             (void) pam_set_item(pamh, PAM_USER, pw->pw_name);
(gdb) n
253             (void) pam_close_session(pamh, PAM_SILENT);
(gdb) n

Breakpoint 3, 0x00007fc7ca85f740 in pam_sm_close_session () from 
/lib/x86_64-linux-gnu/security/pam_permit.so
(gdb) c
Continuing.

Breakpoint 3, 0x00007fc7ca85f740 in pam_sm_close_session () from 
/lib/x86_64-linux-gnu/security/pam_permit.so
(gdb) c
Continuing.

Breakpoint 3, 0x00007fc7c5eca2e0 in pam_sm_close_session () from 
/lib/x86_64-linux-gnu/security/pam_umask.so
(gdb) c
Continuing.

Breakpoint 3, 0x00007fc7cb0bf9f0 in pam_sm_close_session () from 
/lib/x86_64-linux-gnu/security/pam_unix.so
(gdb) c
Continuing.

Breakpoint 3, pam_sm_close_session (pamh=0x20f1520, flags=32768, argc=0, 
argv=0x210ba00) at pam_mount.c:681
681     {
(gdb) n
685             assert(pamh != NULL);
(gdb) n
682             const char *pam_user = NULL;
(gdb) n
685             assert(pamh != NULL);
(gdb) n
687             ret = HX_init();
(gdb) n
688             if (ret <= 0)
(gdb) n
691             w4rn("received order to close things\n");
(gdb) n
692             if (Config.volume_list.items == 0) {
(gdb) n
693                     w4rn("No volumes to umount\n");
(gdb) n
690             ret = PAM_SUCCESS;
(gdb) n
693                     w4rn("No volumes to umount\n");
(gdb) n
694                     goto out;
(gdb) n
717             envpath_init(Config.path);
(gdb) n
718             if (modify_pm_count(&Config, Config.user, "-1") > 0)
(gdb) n

Breakpoint 4, modify_pm_count (user=0x0, operation=0x7fc7ca659750 "-1", 
config=<optimized out>) at pam_mount.c:408
408     static int modify_pm_count(struct config *config, char *user,
(gdb) n
417             assert(user != NULL);
(gdb) n
sudo: pam_mount.c:417: modify_pm_count: Assertion `user != ((void *)0)' failed.

Program received signal SIGABRT, Aborted.
0x00007fc7cc286445 in raise () from /lib/x86_64-linux-gnu/libc.so.6


(gdb) bt full
#0  0x00007fc7cc286445 in raise () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#1  0x00007fc7cc289bab in abort () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#2  0x00007fc7cc27f10e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#3  0x00007fc7cc27f1b2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#4  0x00007fc7ca653002 in modify_pm_count (user=0x0, operation=0x7fc7ca659750 
"-1", config=<optimized out>) at pam_mount.c:417
        fp = 0x0
        vinfo = <optimized out>
        argv = <optimized out>
        proc = {p_ops = 0x100000004, p_data = 0x0, p_flags = 0, p_stdin = 0, 
p_stdout = 0, p_stderr = 0, p_pid = 0, 
          p_status = 0 '\000', p_exited = false, p_terminated = false}
        ret = -1
        use_count = <optimized out>
#5  0x00007fc7ca653bd4 in pam_sm_close_session (pamh=<optimized out>, 
flags=<optimized out>, argc=<optimized out>, 
    argv=<optimized out>) at pam_mount.c:718
        pam_user = 0x0
        ret = 0
        __PRETTY_FUNCTION__ = "pam_sm_close_session"
#6  0x00007fc7cbb13b45 in _pam_dispatch_aux (use_cached_chain=<optimized out>, 
resumed=<optimized out>, h=0x210b930, 
    flags=<optimized out>, pamh=0x20f1520) at pam_dispatch.c:110
        retval = <optimized out>
        cached_retval = <optimized out>
        action = <optimized out>
        depth = <optimized out>
        status = <optimized out>
        prev_level = <optimized out>
        stack_level = 0
        impression = 1
        skip_depth = 0
        substates = 0x20fa3d0
#7  _pam_dispatch (pamh=0x20f1520, flags=<optimized out>, choice=5) at 
pam_dispatch.c:395
        h = <optimized out>
        retval = <optimized out>
        use_cached_chain = <optimized out>
        resumed = <optimized out>
---Type <return> to continue, or q <return> to quit---
#8  0x00007fc7cbd25413 in pam_end_session (pw=<optimized out>, auth=<optimized 
out>)
    at /build/buildd/sudo-1.8.3p1/plugins/sudoers/auth/pam.c:253
        status = 0
#9  0x00007fc7cbd24827 in sudo_auth_end_session (pw=0x20fa938) at 
/build/buildd/sudo-1.8.3p1/plugins/sudoers/auth/sudo_auth.c:315
        auth = <optimized out>
        status = <optimized out>
#10 0x00007fc7cbd2c180 in sudoers_policy_close (exit_status=<optimized out>, 
error_code=0)
    at /build/buildd/sudo-1.8.3p1/plugins/sudoers/sudoers.c:259
No locals.
#11 0x0000000000409321 in policy_close (error=0, exit_status=<optimized out>, 
plugin=<optimized out>)
    at /build/buildd/sudo-1.8.3p1/src/sudo.c:1109
No locals.
#12 run_command (details=<optimized out>) at 
/build/buildd/sudo-1.8.3p1/src/sudo.c:1081
        plugin = <optimized out>
        cstat = {type = 2, val = 0}
        exitcode = 1
#13 0x00000000004038f1 in main (argc=<optimized out>, argv=<optimized out>, 
envp=<optimized out>)
    at /build/buildd/sudo-1.8.3p1/src/sudo.c:295
        nargc = 2
        sudo_mode = <optimized out>
        exitcode = 0
        nargv = 0x7fff5921d3a0
        settings = 0x20eda00
        env_add = 0x20ed7d0
        user_info = <optimized out>
        command_info = 0x7fc7cbf4cf60
        argv_out = 0x20f0888
        user_env_out = 0x20f5300
        plugin = <optimized out>
        next = <optimized out>
        command_details = {uid = 0, euid = 0, gid = 0, egid = 0, umask = 18, 
priority = 0, timeout = 0, ngroups = 1, 
          closefrom = 3, flags = 8325, groups = 0x20fa3b0, command = 0x20f4308 
"/bin/echo", cwd = 0x0, login_class = 0x0, 
          chroot = 0x0, selinux_role = 0x0, selinux_type = 0x0, utmp_user = 
0x0, argv = 0x20f0888, envp = 0x20f5300}
        mask = {__val = {0 <repeats 16 times>}}
        ok = <optimized out>

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/927828

Title:
  sudo: pam_mount.c:417: modify_pm_count: Assertion `user != ((void
  *)0)' failed.

To manage notifications about this bug go to:
https://bugs.launchpad.net/sudo/+bug/927828/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to