svn commit: r296880 - in head: share/man/man9 sys/kern sys/sys

Mateusz Guzik mjguzik at gmail.com
Tue Mar 15 00:16:43 UTC 2016


On Tue, Mar 15, 2016 at 12:05:00AM +0000, Gleb Smirnoff wrote:
> +int
> +sysctl_handle_counter_u64_array(SYSCTL_HANDLER_ARGS)
> +{
> +	uint64_t *out;
> +	int error;
> +
> +	out = malloc(arg2 * sizeof(uint64_t), M_TEMP, M_WAITOK);
> +	for (int i = 0; i < arg2; i++)
> +		out[i] = counter_u64_fetch(((counter_u64_t *)arg1)[i]);
> +
> +	error = SYSCTL_OUT(req, out, arg2 * sizeof(uint64_t));
> +
> +	if (error || !req->newptr)
> +		return (error);
> +
> +	/*
> +	 * Any write attempt to a counter zeroes it.
> +	 */
> +	for (int i = 0; i < arg2; i++)
> +		counter_u64_zero(((counter_u64_t *)arg1)[i]);
> + 
> +	return (0);
> +}
> 

This never frees tha allocated buffer.

It would be better to just put stuff to userspace in a loop and avoid
allocations entirely. but does not look like there are no friendly
macros for that.

-- 
Mateusz Guzik <mjguzik gmail.com>


More information about the svn-src-head mailing list