PERFORCE change 167164 for review

Edward Tomasz Napierala trasz at FreeBSD.org
Mon Aug 10 10:01:55 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=167164

Change 167164 by trasz at trasz_anger on 2009/08/10 10:01:38

	Fix two LORs.

Affected files ...

.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#51 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#22 edit

Differences ...

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#51 (text+ko) ====

@@ -57,6 +57,7 @@
 
 /* Default buffer size for hrl_get_rules(2). */
 #define	HRL_DEFAULT_BUFSIZE	4096
+#define	HRL_LOG_BUFSIZE		128
 
 int hrl_group_accounting = 0;
 
@@ -329,8 +330,9 @@
 	int64_t available[HRL_RESOURCE_MAX];
 	struct hrl_rule *rule;
 	struct hrl_limit *limit;
-	struct sbuf *sb;
+	struct sbuf sb;
 	int should_deny = 0;
+	char *buf;
 
 	mtx_assert(&hrl_lock, MA_OWNED);
 
@@ -368,13 +370,19 @@
 			should_deny = 1;
 			break;
 		case HRL_ACTION_LOG:
-			sb = sbuf_new_auto();
-			hrl_rule_to_sbuf(sb, rule);
-			sbuf_finish(sb);
+			buf = malloc(HRL_LOG_BUFSIZE, M_HRL, M_NOWAIT);
+			if (buf == NULL) {
+				printf("hrl_enforce_proc: out of memory\n");
+				continue;
+			}
+			sbuf_new(&sb, buf, HRL_LOG_BUFSIZE, SBUF_FIXEDLEN);
+			hrl_rule_to_sbuf(&sb, rule);
+			sbuf_finish(&sb);
 			printf("resource limit \"%s\" exceeded by process %d (%s), "
-			    "uid %d\n", sbuf_data(sb), p->p_pid, p->p_comm,
+			    "uid %d\n", sbuf_data(&sb), p->p_pid, p->p_comm,
 			    p->p_ucred->cr_uid);
-			sbuf_delete(sb);
+			sbuf_delete(&sb);
+			free(buf, M_HRL);
 			break;
 		case HRL_ACTION_SIGHUP:
 			hrl_deferred_psignal(p, SIGHUP);
@@ -1493,17 +1501,18 @@
 		return (EOPNOTSUPP);
 	}
 
-	p = pfind(filter->hr_subject_id);
-	if (p == NULL) {
-		hrl_rule_release(filter);
-		return (ESRCH);
-	}
-
 again:
 	buf = malloc(bufsize, M_HRL, M_WAITOK);
 	sb = sbuf_new(NULL, buf, bufsize, SBUF_FIXEDLEN);
 	KASSERT(sb != NULL, ("sbuf_new failed"));
 
+	p = pfind(filter->hr_subject_id);
+	if (p == NULL) {
+		sbuf_delete(sb);
+		error = ESRCH;
+		goto out;
+	}
+
 	mtx_lock(&hrl_lock);
 	LIST_FOREACH(limit, &p->p_limits, hl_next) {
 		hrl_rule_to_sbuf(sb, limit->hl_rule);
@@ -1525,6 +1534,7 @@
 		sbuf_setpos(sb, sbuf_len(sb) - 1);
 
 	error = hrl_write_outbuf(sb, uap->outbufp, uap->outbuflen);
+out:
 	hrl_rule_release(filter);
 	free(buf, M_HRL);
 	return (error);

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#22 (text+ko) ====



More information about the p4-projects mailing list