|
@@ -633,10 +633,14 @@ int ntp_validate_timex(struct timex *txc)
|
|
|
if ((txc->modes & ADJ_SETOFFSET) && (!capable(CAP_SYS_TIME)))
|
|
|
return -EPERM;
|
|
|
|
|
|
- if (txc->modes & ADJ_FREQUENCY) {
|
|
|
- if (LONG_MIN / PPM_SCALE > txc->freq)
|
|
|
+ /*
|
|
|
+ * Check for potential multiplication overflows that can
|
|
|
+ * only happen on 64-bit systems:
|
|
|
+ */
|
|
|
+ if ((txc->modes & ADJ_FREQUENCY) && (BITS_PER_LONG == 64)) {
|
|
|
+ if (LLONG_MIN / PPM_SCALE > txc->freq)
|
|
|
return -EINVAL;
|
|
|
- if (LONG_MAX / PPM_SCALE < txc->freq)
|
|
|
+ if (LLONG_MAX / PPM_SCALE < txc->freq)
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|