pmc: Initialise and check the pm_flags field for CONFIGURELOG

Whilst the former is not breaking, the latter is, and so this will be
followed by a bump to the pmc major version. This will allow the flags
to actually be usable in future, as otherwise we cannot distinguish
uninitialised stack junk from a deliberately-initialised value.

Reviewed by:	jhb, mhorne
Differential Revision:	https://reviews.freebsd.org/D40049
This commit is contained in:
Jessica Clarke 2023-05-31 00:15:24 +01:00
parent 2071e54c22
commit 8e63e787ab
3 changed files with 13 additions and 0 deletions

View file

@ -1195,6 +1195,7 @@ pmc_configure_logfile(int fd)
{
struct pmc_op_configurelog cla;
cla.pm_flags = 0;
cla.pm_logfd = fd;
if (PMC_CALL(CONFIGURELOG, &cla) < 0)
return (-1);

View file

@ -598,6 +598,12 @@ An invalid CPU number was passed in for a
.Dv PMC_OP_GETPMCINFO
operation.
.It Bq Er EINVAL
The
.Ar pm_flags
argument to a
.Dv PMC_OP_CONFIGURELOG
request contained unknown flags.
.It Bq Er EINVAL
A
.Dv PMC_OP_CONFIGURELOG
request to de-configure a log file was issued without a log file

View file

@ -3438,6 +3438,12 @@ pmc_syscall_handler(struct thread *td, void *syscall_args)
break;
}
/* No flags currently implemented */
if (cl.pm_flags != 0) {
error = EINVAL;
break;
}
/* mark this process as owning a log file */
p = td->td_proc;
if ((po = pmc_find_owner_descriptor(p)) == NULL)