--- a/sesman/session.c
+++ b/sesman/session.c
@@ -526,7 +526,12 @@ session_start_fork(tbus data, tui8 type,
         g_delete_wait_obj(g_sigchld_event);
         g_delete_wait_obj(g_term_event);
 
-        auth_start_session(data, display);
+        if (auth_start_session(data, display) != 0)
+        {
+            // Errors are logged by the auth module, as they are
+            // specific to that module
+            g_exit(1);
+        }
         sesman_close_all();
         g_sprintf(geometry, "%dx%d", s->width, s->height);
         g_sprintf(depth, "%d", s->bpp);
--- a/sesman/verify_user_pam.c
+++ b/sesman/verify_user_pam.c
@@ -308,8 +308,8 @@ auth_userpass(const char *user, const ch
 
 /******************************************************************************/
 /* returns error */
-int
-auth_start_session(long in_val, int in_display)
+static int
+auth_start_session_private(long in_val, int in_display)
 {
     struct t_auth_info *auth_info;
     int error;
@@ -350,6 +350,26 @@ auth_start_session(long in_val, int in_d
 }
 
 /******************************************************************************/
+/**
+ * Main routine to start a session
+ *
+ * Calls the private routine and logs an additional error if the private
+ * routine fails
+ */
+int
+auth_start_session(long in_val, int in_display)
+{
+    int result = auth_start_session_private(in_val, in_display);
+    if (result != 0)
+    {
+        LOG(LOG_LEVEL_ERROR,
+            "Can't start PAM session. See PAM logging for more info");
+    }
+
+    return result;
+}
+
+/******************************************************************************/
 /* returns error */
 int
 auth_stop_session(long in_val)
