On 02/28/2017 16:57, Conrad Meyer wrote:
On Tue, Feb 28, 2017 at 2:31 PM, Eric van Gyzen <vangy...@freebsd.org> wrote:
Your system's real-time clock is returning garbage.  r312702 added some
input validation a few weeks ago.  Previously, the kernel was reading beyond
the end of an array and either complaining about the clock or setting it to
the wrong time based on whatever was in the memory beyond the array.

The added validation shouldn't be an assertion because it operates on data
beyond the kernel's control.  Try this:

--- sys/libkern.h       (revision 314424)
+++ sys/libkern.h       (working copy)
@@ -57,8 +57,10 @@
 bcd2bin(int bcd)

-       KASSERT(bcd >= 0 && bcd < LIBKERN_LEN_BCD2BIN,
-           ("invalid bcd %d", bcd));
+       if (bcd < 0 || bcd >= LIBKERN_LEN_BCD2BIN) {
+               printf("invalid bcd %d\n", bcd);
+               return (0);
+       }
        return (bcd2bin_data[bcd]);

I don't think removing this assertion and truncating to zero is the
right thing to do.  Adding an error return to this routine is a little
much, though.  I think probably the caller should perform input
validation between the broken device and this routine.

Either of those would be a much better solution. This was just a quick hack to get the memstick to boot.

freebsd-current@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to