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