Re: Dagens opgave: divide by zero i dhclient

From: Erik Cederstrand <none_at_erik--cederstrand.dk.lh.bsd-dk.dk>
Date: Wed, 10 Oct 2012 14:57:00 +0200
To: devel_at_bsd-dk.dk

Den 09/10/2012 kl. 14.15 skrev Erik Cederstrand <none_at_erik--cederstrand.dk.lh.bsd-dk.dk>:

> http://scan.freebsd.your.org/freebsd-head/WORLD/2012-10-07-amd64/report-nBhqE2.html#EndPath
>
> God fornøjelse!

Nå, både interval og backoff_cutoff er af typen time_t, som er en signed int, dvs. den kan være netativ, positiv eller 0.

En del af medlemmerne af struct client_state og struct client_config (se src/sbin/dhclient/dhcpd.h) er defineret tim time_t men er i virkeligheden beregnet til at gemme tidsintervaller, altså værdier > 0. Det bliver ikke kontrolleret direkte i koden nogen steder, så vidt jeg kan se.

Man kunne sætte en "assert(ip->client->interval > 0);" ind før divide-by-zero, men der er mange andre beregninger, der forudsætter værdier > 0, så det bliver hurtigt grimt, hvis koden bliver sovset ind i assert()s.

Man kunne checke værdierne i parse_lease_time(), men den funktion er defineret i en anden fil (translation unit), og så smart er analyzeren ikke. Den tager kun headers med.

Mvh Erik
Received on Wed 10 Oct 2012 - 14:57:00 CEST

This archive was generated by hypermail 2.2.0 : Wed 27 Mar 2013 - 10:40:20 CET