Old OpenSSL Compatibility (x: Old OpenSSL Cpmpaitibility)
Fred Wright
fw at fwright.net
Tue Dec 24 22:36:37 UTC 2024
On Wed, 18 Dec 2024, Hal Murray wrote:
> Fred Wright said:
>> I'm always in favor of maximum compatibility.
>
> There is a tradeoff between broader compatibility and clutter in the code.
Indeed, though a good design keeps aspects dependent on the OS or other
outside packages well-segregated.
>> (though OpenBSD requires the same patches as I use for older OSX
>> versions).
>
> How big is the patch for OSX? I think that's much more interesting that
> ancient versions of OpenSSL. Can we set it up with all the extra code in
> a compatibility module that just implements ntp_adjtime() and only gets
> linked in if needed?
The changes break down into four categories. In roughly chronological
order by introduction:
1) Fallbacks for clock_gettime() and clock_settime().
2) Restoration of the optionality of timex and KERNEL_PLL.
3) Various warning fixes.
4) Packet timestamp fixes for OSX 10.5 x86_64.
For #1, the issue arose when Eric was trying to implement some kind of
fallback, apparently in some strange way, when he got frustrated by
mismatches between documentation and actual behavior, threw in the towel,
and declared macOS <10.12 to be unsupported. This is bizarre, since
fallbacks for those functions are quite straightforward, and in fact gpsd
has had clock_gettime() fallbacks for ages. In this case, I did them as
inline functions residing entirely in ntp_machine.h. The only ongoing
complication is that every time you add a new attic program that uses
clock_gettime(), I have to add the ntp_machine include to unbreak it.
For #2, the issue arose when Eric added two commits to make those features
mandatory, initially described as a trial balloon, but left in place.
Since macOS doesn't provide those capabilities until 10.13, it further
raised the bar on OS versions. My fix was simply to revert the two
commits, though resolving related conflicts is an ongoing problem. As is,
these patches are clutter on steroids, so I don't think you'd want them.
In theory, the code could probably be refactored to better localize that
dependence, but I've never done that for a couple of reasons:
1) At any given point, fixing the conflicts is less work than refactoring
the code.
2) I think this kind of incestuous relationship between ntpd and the
kernel is a bad idea, anyway. A better approach would be to create a
timescale entirely in userspace that represents the best estimate of the
correct time, and then separately and optionally steer the system time to
match. The only kernel support needed for a userspace timescale is
CLOCK_MONOTONIC_RAW or equivalent.
For #3, warnings pop up at various times and usually have simple fixes,
though since they're only warnings, the fixes aren't mandatory. In
general, they actually relate to the compiler version rather than the OS
version, though there tends to be coupling between the two.
For #4, I only got around to tracking that one down several months ago.
The symptom was that everything would build and pass all the tests, but
ntpd didn't actually work. It turned out to be due to two separate issues
related to packet timestamps, which were harder to track down than they
should have been, since dropping packets due to bad timestamps doesn't
even produce a debug message, let alone a log message. The bugs were:
1) A bad definition of CMSG_DATA in the OSX 10.5 headers resulted in a bad
payload pointer in 64-bit builds.
2) If the bitness of the kernel's time_t doesn't match userspace's, then
packet timestamps may not have the expected format, resulting in garbling.
The fix is to pay attention to the cmsg length to see which kind of
timestamp is being provided. Although this problem has only been observed
in an old OSX case, it's not conceptually Mac-specific, and I just
submitted MR !1414 with the fix (a cleaned up version of my original).
The main reason I haven't bothered submitting any of this (except as
noted) is that the actual range of supported macOS versions wouldn't be
increased without #2, which I'm pretty sure is unacceptable as is. Though
I guess getting some acceptable changes incorporated would at least reduce
the size of the patches I have to apply in MacPorts. That might be worth
looking at after the release.
Fred Wright
More information about the devel
mailing list