Re: Implementierung von malloc und free unter FreeBSD

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Fri, 10 Sep 2004 13:28:40 +0200

On Fri, Sep 10, 2004 at 11:49:34AM +0200, Oliver Boris Fischer wrote:
> Hallo Liste,
>
> Gott, ich habe hier drei Tage an einem für mich unerklärlichen C-Problem
> geknobelt, bis ich bemerkte, daß free(p) den Speicher, auf den p zeigt,
> wahrscheinlich freigibt, jedoch die Daten, die in diesem Speicher
> abgelegt sind, unverändert läßt. Arbeite greife ich später wieder auf p
> zu, erhalte ich die Daten, die vor dem Aufruf von free() dort abgelegt
> waren. Daher zwei Fragen:
>
> 1. Ist eigentlich irgendwo festgelegt, was free mit dem Speicher,
> auf den p verweist, zu tun hat? (Natürlich außer ihn als
> frei zu markieren.)

Nein - wenn der den verändern würde, dann geht das ja notwendigerweise
auf die Performance.
Der Speicherinhalt ändert sich erst, wenn er neu vergeben wird und auch
dann erst wenn er tatsächlich beschrieben wird.
Das ist auch einer der Gründe, warum malloc Speicher mit unbekanntem
Inhalt liefert (Außer mit aktivierten malloc J Debugging Feature).

> 2. Stellt diese Standardeinstellung nicht ein Sicherheitsloch dar?

Wieso?
malloc/free verarbeiten eigendlich nur Prozessaddressraum - ein anderer
Prozess kann deshalb immer noch nicht darauf zugreifen - physikalischer
Speicher von kernel ist intial genullt, der macht das aber auch erst
bei Bedarf, oder wenn er gerade nichts besseres zu tun hat.
Einer Anwendung steht es doch frei vor dem free Aufruf den Speicher
zu nullen, oder sonstwie den Inhalt unbrauchbar zu machen.
Dabei geht es um Spezialanwendungen, wo z.B. eine Passphrase im Speicher
abgelegt werden muss.
Im Speicher muss man es aber so oder so haben, kritisch wird es erst
wenn der Speicher durch swap auf die Platte gelangt.
Für solche Anwendungen kann man deshalb malloc Space eh nicht
gebrauchen und muss sich selber darum kümmern non-swapable Speicher vom
Kernel zu bekommen.

-- 
B.Walter                   BWCT                http://www.bwct.de
bernd(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 10 Sep 2004 - 13:30:13 CEST

search this site