View | Details | Raw Unified | Return to bug 19535
Collapse All | Expand All

(-)procfs_rlimit.c (-26 / +9 lines)
Lines 52-57 Link Here
52
#include <sys/resourcevar.h>
52
#include <sys/resourcevar.h>
53
#include <sys/resource.h>
53
#include <sys/resource.h>
54
#include <sys/types.h>
54
#include <sys/types.h>
55
#include <sys/malloc.h>
55
#include <miscfs/procfs/procfs.h>
56
#include <miscfs/procfs/procfs.h>
56
57
57
58
Lines 66-106 Link Here
66
	int i;
67
	int i;
67
	int xlen;
68
	int xlen;
68
	int error;
69
	int error;
69
	char psbuf[512];		/* XXX - conservative */
70
	char *psbuf;
70
71
71
	if (uio->uio_rw != UIO_READ)
72
	if (uio->uio_rw != UIO_READ)
72
		return (EOPNOTSUPP);
73
		return (EOPNOTSUPP);
73
74
	psbuf = (char *)malloc(512 * sizeof(char), M_TEMP, M_WAITOK);
74
75
		/* XXX conservative, but potentially overflowable */
75
	ps = psbuf;
76
	ps = psbuf;
76
77
	for (i = 0; i < RLIM_NLIMITS; i++) {
77
	for (i = 0; i < RLIM_NLIMITS; i++) {
78
78
		/* Add the rlimit ident */
79
		/*
80
		 * Add the rlimit ident
81
		 */
82
83
		ps += sprintf(ps, "%s ", rlimit_ident[i]);
79
		ps += sprintf(ps, "%s ", rlimit_ident[i]);
84
80
		/* Replace RLIM_INFINITY with -1 in the string */
85
		/* 
81
		/* current limit */
86
		 * Replace RLIM_INFINITY with -1 in the string
87
		 */
88
89
		/*
90
		 * current limit
91
		 */
92
93
		if (p->p_rlimit[i].rlim_cur == RLIM_INFINITY) {
82
		if (p->p_rlimit[i].rlim_cur == RLIM_INFINITY) {
94
			ps += sprintf(ps, "-1 ");
83
			ps += sprintf(ps, "-1 ");
95
		} else {
84
		} else {
96
			ps += sprintf(ps, "%llu ",
85
			ps += sprintf(ps, "%llu ",
97
				(unsigned long long)p->p_rlimit[i].rlim_cur);
86
				(unsigned long long)p->p_rlimit[i].rlim_cur);
98
		}
87
		}
99
88
		/* maximum limit */
100
		/*
101
		 * maximum limit
102
		 */
103
104
		if (p->p_rlimit[i].rlim_max == RLIM_INFINITY) {
89
		if (p->p_rlimit[i].rlim_max == RLIM_INFINITY) {
105
			ps += sprintf(ps, "-1\n");
90
			ps += sprintf(ps, "-1\n");
106
		} else {
91
		} else {
Lines 108-119 Link Here
108
				(unsigned long long)p->p_rlimit[i].rlim_max);
93
				(unsigned long long)p->p_rlimit[i].rlim_max);
109
		}
94
		}
110
	}
95
	}
111
112
	/*
96
	/*
113
	 * This logic is rather tasty - but its from procfs_status.c, so
97
	 * This logic is rather tasty - but its from procfs_status.c, so
114
	 * I guess I'll use it here.
98
	 * I guess I'll use it here.
115
	 */
99
	 */
116
117
	xlen = ps - psbuf;
100
	xlen = ps - psbuf;
118
	xlen -= uio->uio_offset;
101
	xlen -= uio->uio_offset;
119
	ps = psbuf + uio->uio_offset;
102
	ps = psbuf + uio->uio_offset;
Lines 122-128 Link Here
122
		error = 0;
105
		error = 0;
123
	else
106
	else
124
		error = uiomove(ps, xlen, uio);
107
		error = uiomove(ps, xlen, uio);
125
108
	free(psbuf, M_TEMP);
126
	return (error);
109
	return (error);
127
}
110
}

Return to bug 19535