parent
9467290bc7
commit
6e3058a9c5
133
Fix-segfault-in-finish_dispatch.patch
Normal file
133
Fix-segfault-in-finish_dispatch.patch
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
From d134cd489a6841f510b3efdf4ddcb283493655f0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robbie Harwood <rharwood@redhat.com>
|
||||||
|
Date: Wed, 18 Apr 2018 14:13:28 -0400
|
||||||
|
Subject: [PATCH] Fix segfault in finish_dispatch()
|
||||||
|
|
||||||
|
dispatch() doesn't necessarily initialize state->active_realm which
|
||||||
|
led to an explicit NULL dereference in finish_dispatch().
|
||||||
|
|
||||||
|
Additionally, fix make_too_big_error() so that it won't subsequently
|
||||||
|
dereference state->active_realm.
|
||||||
|
|
||||||
|
tags: pullup
|
||||||
|
target_version: 1.16-next
|
||||||
|
target_version: 1.15-next
|
||||||
|
---
|
||||||
|
src/kdc/dispatch.c | 79 ++++++++++++++++++++++++----------------------
|
||||||
|
1 file changed, 42 insertions(+), 37 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/kdc/dispatch.c b/src/kdc/dispatch.c
|
||||||
|
index 3ed5176a8..fb3686c98 100644
|
||||||
|
--- a/src/kdc/dispatch.c
|
||||||
|
+++ b/src/kdc/dispatch.c
|
||||||
|
@@ -35,9 +35,6 @@
|
||||||
|
|
||||||
|
static krb5_int32 last_usec = 0, last_os_random = 0;
|
||||||
|
|
||||||
|
-static krb5_error_code make_too_big_error(kdc_realm_t *kdc_active_realm,
|
||||||
|
- krb5_data **out);
|
||||||
|
-
|
||||||
|
struct dispatch_state {
|
||||||
|
loop_respond_fn respond;
|
||||||
|
void *arg;
|
||||||
|
@@ -47,6 +44,41 @@ struct dispatch_state {
|
||||||
|
krb5_context kdc_err_context;
|
||||||
|
};
|
||||||
|
|
||||||
|
+
|
||||||
|
+static krb5_error_code
|
||||||
|
+make_too_big_error(krb5_context context, krb5_principal tgsprinc,
|
||||||
|
+ krb5_data **out)
|
||||||
|
+{
|
||||||
|
+ krb5_error errpkt;
|
||||||
|
+ krb5_error_code retval;
|
||||||
|
+ krb5_data *scratch;
|
||||||
|
+
|
||||||
|
+ *out = NULL;
|
||||||
|
+ memset(&errpkt, 0, sizeof(errpkt));
|
||||||
|
+
|
||||||
|
+ retval = krb5_us_timeofday(context, &errpkt.stime, &errpkt.susec);
|
||||||
|
+ if (retval)
|
||||||
|
+ return retval;
|
||||||
|
+ errpkt.error = KRB_ERR_RESPONSE_TOO_BIG;
|
||||||
|
+ errpkt.server = tgsprinc;
|
||||||
|
+ errpkt.client = NULL;
|
||||||
|
+ errpkt.text.length = 0;
|
||||||
|
+ errpkt.text.data = 0;
|
||||||
|
+ errpkt.e_data.length = 0;
|
||||||
|
+ errpkt.e_data.data = 0;
|
||||||
|
+ scratch = malloc(sizeof(*scratch));
|
||||||
|
+ if (scratch == NULL)
|
||||||
|
+ return ENOMEM;
|
||||||
|
+ retval = krb5_mk_error(context, &errpkt, scratch);
|
||||||
|
+ if (retval) {
|
||||||
|
+ free(scratch);
|
||||||
|
+ return retval;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *out = scratch;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
finish_dispatch(struct dispatch_state *state, krb5_error_code code,
|
||||||
|
krb5_data *response)
|
||||||
|
@@ -54,12 +86,17 @@ finish_dispatch(struct dispatch_state *state, krb5_error_code code,
|
||||||
|
loop_respond_fn oldrespond = state->respond;
|
||||||
|
void *oldarg = state->arg;
|
||||||
|
kdc_realm_t *kdc_active_realm = state->active_realm;
|
||||||
|
+ krb5_principal tgsprinc = NULL;
|
||||||
|
+
|
||||||
|
+ if (kdc_active_realm != NULL)
|
||||||
|
+ tgsprinc = kdc_active_realm->realm_tgsprinc;
|
||||||
|
|
||||||
|
if (state->is_tcp == 0 && response &&
|
||||||
|
response->length > (unsigned int)max_dgram_reply_size) {
|
||||||
|
- krb5_free_data(kdc_context, response);
|
||||||
|
+ krb5_free_data(state->kdc_err_context, response);
|
||||||
|
response = NULL;
|
||||||
|
- code = make_too_big_error(kdc_active_realm, &response);
|
||||||
|
+ code = make_too_big_error(state->kdc_err_context, tgsprinc,
|
||||||
|
+ &response);
|
||||||
|
if (code)
|
||||||
|
krb5_klog_syslog(LOG_ERR, "error constructing "
|
||||||
|
"KRB_ERR_RESPONSE_TOO_BIG error: %s",
|
||||||
|
@@ -208,38 +245,6 @@ done:
|
||||||
|
finish_dispatch_cache(state, retval, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static krb5_error_code
|
||||||
|
-make_too_big_error(kdc_realm_t *kdc_active_realm, krb5_data **out)
|
||||||
|
-{
|
||||||
|
- krb5_error errpkt;
|
||||||
|
- krb5_error_code retval;
|
||||||
|
- krb5_data *scratch;
|
||||||
|
-
|
||||||
|
- *out = NULL;
|
||||||
|
- memset(&errpkt, 0, sizeof(errpkt));
|
||||||
|
-
|
||||||
|
- retval = krb5_us_timeofday(kdc_context, &errpkt.stime, &errpkt.susec);
|
||||||
|
- if (retval)
|
||||||
|
- return retval;
|
||||||
|
- errpkt.error = KRB_ERR_RESPONSE_TOO_BIG;
|
||||||
|
- errpkt.server = tgs_server;
|
||||||
|
- errpkt.client = NULL;
|
||||||
|
- errpkt.text.length = 0;
|
||||||
|
- errpkt.text.data = 0;
|
||||||
|
- errpkt.e_data.length = 0;
|
||||||
|
- errpkt.e_data.data = 0;
|
||||||
|
- scratch = malloc(sizeof(*scratch));
|
||||||
|
- if (scratch == NULL)
|
||||||
|
- return ENOMEM;
|
||||||
|
- retval = krb5_mk_error(kdc_context, &errpkt, scratch);
|
||||||
|
- if (retval) {
|
||||||
|
- free(scratch);
|
||||||
|
- return retval;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- *out = scratch;
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
|
||||||
|
krb5_context get_context(void *handle)
|
||||||
|
{
|
35
Log-when-non-root-ksu-authorization-fails.patch
Normal file
35
Log-when-non-root-ksu-authorization-fails.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From 6b85df6c6f4bb0e61ba0913722317f4e2c3c23fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robbie Harwood <rharwood@redhat.com>
|
||||||
|
Date: Mon, 7 May 2018 16:42:59 -0400
|
||||||
|
Subject: [PATCH] Log when non-root ksu authorization fails
|
||||||
|
|
||||||
|
If non-root user attempts to ksu but is denied by policy, log to
|
||||||
|
syslog at LOG_WARNING in keeping with other failure messages.
|
||||||
|
|
||||||
|
ticket: 8270
|
||||||
|
(cherry picked from commit 6cfa5c113e981f14f70ccafa20abfa5c46b665ba)
|
||||||
|
---
|
||||||
|
src/clients/ksu/main.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/clients/ksu/main.c b/src/clients/ksu/main.c
|
||||||
|
index c6321c01b..35ff8978f 100644
|
||||||
|
--- a/src/clients/ksu/main.c
|
||||||
|
+++ b/src/clients/ksu/main.c
|
||||||
|
@@ -417,6 +417,16 @@ main (argc, argv)
|
||||||
|
if (hp){
|
||||||
|
if (gb_err) fprintf(stderr, "%s", gb_err);
|
||||||
|
fprintf(stderr, _("account %s: authorization failed\n"), target_user);
|
||||||
|
+
|
||||||
|
+ if (cmd != NULL) {
|
||||||
|
+ syslog(LOG_WARNING,
|
||||||
|
+ "Account %s: authorization for %s for execution of %s failed",
|
||||||
|
+ target_user, source_user, cmd);
|
||||||
|
+ } else {
|
||||||
|
+ syslog(LOG_WARNING, "Account %s: authorization of %s failed",
|
||||||
|
+ target_user, source_user);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@ Summary: The Kerberos network authentication system
|
|||||||
Name: krb5
|
Name: krb5
|
||||||
Version: 1.16.1
|
Version: 1.16.1
|
||||||
# for prerelease, should be e.g., 0.% {prerelease}.1% { ?dist } (without spaces)
|
# for prerelease, should be e.g., 0.% {prerelease}.1% { ?dist } (without spaces)
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
|
|
||||||
# lookaside-cached sources; two downloads and a build artifact
|
# lookaside-cached sources; two downloads and a build artifact
|
||||||
Source0: https://web.mit.edu/kerberos/dist/krb5/1.16/krb5-%{version}%{prerelease}.tar.gz
|
Source0: https://web.mit.edu/kerberos/dist/krb5/1.16/krb5-%{version}%{prerelease}.tar.gz
|
||||||
@ -87,6 +87,8 @@ Patch64: Zap-data-when-freeing-krb5_spake_factor.patch
|
|||||||
Patch65: Be-more-careful-asking-for-AS-key-in-SPAKE-client.patch
|
Patch65: Be-more-careful-asking-for-AS-key-in-SPAKE-client.patch
|
||||||
Patch68: Restrict-pre-authentication-fallback-cases.patch
|
Patch68: Restrict-pre-authentication-fallback-cases.patch
|
||||||
Patch69: Remove-nodes-option-from-make-certs-scripts.patch
|
Patch69: Remove-nodes-option-from-make-certs-scripts.patch
|
||||||
|
Patch70: Fix-segfault-in-finish_dispatch.patch
|
||||||
|
Patch71: Log-when-non-root-ksu-authorization-fails.patch
|
||||||
|
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://web.mit.edu/kerberos/www/
|
URL: http://web.mit.edu/kerberos/www/
|
||||||
@ -738,6 +740,10 @@ exit 0
|
|||||||
%{_libdir}/libkadm5srv_mit.so.*
|
%{_libdir}/libkadm5srv_mit.so.*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jun 01 2018 Robbie Harwood <rharwood@redhat.com> - 1.16.1-3
|
||||||
|
- Log when non-root ksu authorization fails
|
||||||
|
- Resolves: #1575771
|
||||||
|
|
||||||
* Fri May 04 2018 Robbie Harwood <rharwood@redhat.com> - 1.16.1-2
|
* Fri May 04 2018 Robbie Harwood <rharwood@redhat.com> - 1.16.1-2
|
||||||
- Remove "-nodes" option from make-certs scripts
|
- Remove "-nodes" option from make-certs scripts
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user