ptp: validate the requested frequency adjustment.
PTP Hardware Clock drivers specify a maximum frequency adjustment that their clocks can accommodate. Normally, user space programs will want to respect the advertised limits. However, no kernel or driver code checks that the dialed frequency offset is within the bounds, and out of range values can lead to surprising results. This patch fixes the issue by rejecting bad values. Signed-off-by: Richard Cochran <richardcochran@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5a2b646ffe
commit
d39a743511
|
@ -142,7 +142,10 @@ static int ptp_clock_adjtime(struct posix_clock *pc, struct timex *tx)
|
|||
delta = ktime_to_ns(kt);
|
||||
err = ops->adjtime(ops, delta);
|
||||
} else if (tx->modes & ADJ_FREQUENCY) {
|
||||
err = ops->adjfreq(ops, scaled_ppm_to_ppb(tx->freq));
|
||||
s32 ppb = scaled_ppm_to_ppb(tx->freq);
|
||||
if (ppb > ops->max_adj || ppb < -ops->max_adj)
|
||||
return -ERANGE;
|
||||
err = ops->adjfreq(ops, ppb);
|
||||
ptp->dialed_frequency = tx->freq;
|
||||
} else if (tx->modes == 0) {
|
||||
tx->freq = ptp->dialed_frequency;
|
||||
|
|
Loading…
Reference in New Issue