Re: Implementierung von malloc und free unter FreeBSD

From: Harold Gutch <logix(at)foobar.franken.de>
Date: Fri, 10 Sep 2004 13:38:43 +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.)

Jein - AFAIK muss der Speicher zunaechst nur freigegeben werden.
Die BSD-Implementationen von malloc() koennen aber per Symlink
/etc/malloc.conf, per Umgebungsvariable, oder per globaler
Variable in deinem Programm zu zusaetzlichem Verhalten gebracht
werden. Prinzipiell sind das zwar Debug-Optionen, wenn du aber
Performanceeinbussen in Kauf nimmst, kannst du z.B. die "J"
Option benutzen, um zu garantieren, dass freigegebener Speicher
nocht doch noch alte Daten enthaelt. Genauer ist das in der
Manpage zu malloc() beschrieben.

> 2. Stellt diese Standardeinstellung nicht ein Sicherheitsloch dar?

Im Prinzip ja, ein boeses Programm koennte so viel Speicher wie
moeglich alloziieren, den dann durchwuehlen, und alles was es so
an Klartextstrings findet, speichern. Sicherheitsrelevante
Programme (ssh/sshd/pgp/...) ueberschreiben daher kritische Daten
im Speicher nach der Benutzung.

bye,
  Harold

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:39:13 CEST

search this site