comp.lang.ada
 help / color / mirror / Atom feed
From: "Ian S. Nelson" <nelsonis@earthlink.net>
Subject: Re: Ada's Slide To Oblivion ...
Date: Wed, 06 Feb 2002 22:03:57 GMT
Date: 2002-02-06T22:03:57+00:00	[thread overview]
Message-ID: <3C61A848.60004@earthlink.net> (raw)
In-Reply-To: a3s70v$1ac4bu$1@ID-25716.news.dfncis.de

Nick Roberts wrote:

> "Ole-Hjalmar Kristensen" <oleh@vlinux.voxelvision.no> wrote in message
> news:7v8za79id0.fsf@vlinux.voxelvision.no...
> 
> 
>>>Both C and C++ are fundamentally insecure languages, because they
>>>
> require a
> 
>>>'flat' address space, with no differentiation between the executable
>>>(read-only) and variable (read-write) parts. This completely subverts
>>>
> the
> 
>>Where do you get this wild idea from? There is nothing in the language
>>definition which demands this. At least on UN*X, the executable part
>>is normally put in a read-only segment. But this is not an attribute
>>of the language, but of the  hardware, OS, and the linker/loader.
>>
> 
> Perhaps I did not express myself clearly enough. If you were to re-read what
> I said, carefully, I think you will see that what I wrote does not deny that
> the executable part is put into read-only memory; on the contrary, I
> actually imply it.
> 
> Allow me to try to clarify. The C language requires (in practice if not
> strictly in theory) that all pointers fit into one machine word. On 32-bit
> architectures, this almost invariably forces the use of a 'flat' address
> space (just an offset, with no segment number or equivalent). Which means
> that, for many architectures, the operating system cannot use segmentation
> (or other memory divisions) to detect a call or jump into read-write memory.
> If it were able to do this, it could prevent the execution of code which has
> been (maliciously caused to be) written into memory (by the program itself,
> due to a bug being exploited).

  

Are we talking about processors with an MMU?  When you create a 
pagetable on most modern processors (I'm think pentiums, alpha, sparc, 
powerpc all with an MMU) you can supply permissions to the pages. 
Readable, writable, execuatable.

So when I load an app I can take the pages the the code sits in and make 
them readable and executable.  Then I can make the heap writable but not 
executable, I can make the stack read-write but not executable.  This is 
done in the kernel and they are page attributes, not address attributes. 
  Then when the mmu does the address translation it can detect page 
faults if you try to do an instruction fetch from a non-executable page 
or try to write to a read-only page which are trapped by the OS.  You 
don't need  segments to do this, and it's already done on several OSes 
one several chips with C and C++ code.

The application cannot take an address and determine the permissions for 
a given address but it shouldn't need to.  The OS will get the trap from 
the processor on a page-fault, it may or may not be able to determine 
the type of page-fault by some flags and then it can kill the process, 
or send a signal to it or whatever.

Now that I think about it, I shouldn't have snapped back so quick. 
There probably are architectures without hardware support for memory 
protection and what have you where you still might want to try to do it 
with things like segments.  I couldn't imagine them performing well 
though, but that's never stopped people.   I don't see that as C's fault 
though.


Ian


> On many architectures, then, C prevents the OS from using available memory
> protection mechanisms to prevent buffer overrun exploitation, whereas most
> other programming languages do not. In this way, C is a security liability.
> C++ generally has the same fault.
> 
> 
> "Ian S. Nelson" <nelsonis@earthlink.net> wrote in message
> news:3C6144E7.4010801@earthlink.net...
> 
> 
>>This is flat out wrong.
>>
> 
> I refer the honourable member to my previous answer.
> 
> 
> --
> Nick Roberts
> 
> 
> 
> 





  reply	other threads:[~2002-02-06 22:03 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-01-30 23:09 Ada's Slide To Oblivion Volkert
2002-01-30 23:57 ` Marin David Condic
2002-01-31  3:04   ` Richard Riehle
2002-01-31  3:05     ` Eric Merritt
2002-01-31 16:26       ` Richard Riehle
2002-01-31 16:41         ` Larry Kilgallen
2002-02-02 15:51           ` Zach Swanson
2002-02-02 19:18             ` Richard Riehle
2002-02-04  4:43         ` Richard Riehle
2002-01-31 14:37     ` Marin David Condic
2002-01-31 15:14   ` Ted Dennison
2002-01-31 17:16     ` Marin David Condic
2002-01-31 18:32       ` Steve O'Neill
2002-01-31 18:27     ` Warren W. Gay VE3WWG
2002-01-31 19:22       ` Marin David Condic
2002-01-31 20:40       ` Christopher A. Bohn
2002-01-31 21:08         ` Marin David Condic
2002-02-01 14:22           ` [off-topic - to lighten the air] Wes Groleau
2002-02-01  2:31         ` Ada's Slide To Oblivion Richard Riehle
2002-02-04 16:51           ` Jerry Petrey
2002-02-04 17:49             ` Richard Riehle
2002-02-04 18:24               ` Marin David Condic
2002-02-05  9:04                 ` DPH
2002-02-05 14:46                   ` Marin David Condic
2002-02-05 16:37                 ` Wes Groleau
2002-02-05 17:22                   ` Marin David Condic
2002-02-05 18:42                   ` Preben Randhol
2002-02-06 21:37                     ` Warren W. Gay VE3WWG
2002-02-07 11:30                       ` Georg Bauhaus
2002-02-05 13:48               ` Georg Bauhaus
2002-02-06  7:07             ` Anders Wirzenius
2002-02-01  2:26       ` Richard Riehle
2002-02-01 14:27         ` A. Nonny Mouse
2002-02-01 17:18         ` Dale Pontius
2002-02-06  2:37           ` Nick Roberts
2002-02-06  7:31             ` Ole-Hjalmar Kristensen
2002-02-06 21:27               ` Nick Roberts
2002-02-06 22:03                 ` Ian S. Nelson [this message]
2002-02-07  1:44                 ` Philip Cummins
2002-02-07 13:56                 ` Ian Wild
2002-02-07 17:25                   ` Ray Blaak
2002-02-07 19:20                     ` Hyman Rosen
2002-02-07 21:36                       ` David Brown
2002-02-08 10:36                         ` Ian Wild
2002-02-08 12:23                           ` Ole-Hjalmar Kristensen
2002-02-08 12:51                             ` Ian Wild
2002-02-08 14:28                               ` Marin David Condic
2002-02-08 15:52                               ` Ole-Hjalmar Kristensen
2002-02-08 13:08                             ` Nick Roberts
2002-02-08 21:28                               ` Matthew Woodcraft
2002-02-08 21:45                               ` Nick Roberts
2002-02-08 22:44                                 ` Darren New
2002-02-09  0:39                           ` David Brown
2002-02-18  3:54                 ` David Thompson
2002-02-06 14:59             ` Ian S. Nelson
2002-01-31 18:28     ` Warren W. Gay VE3WWG
2002-01-31  2:37 ` Jim Rogers
2002-01-31 15:02   ` Marin David Condic
2002-01-31 18:28     ` Steve O'Neill
2002-01-31 19:41       ` Larry Kilgallen
2002-01-31 19:53         ` martin.m.dowie
2002-01-31 20:06         ` Marin David Condic
2002-01-31 21:06         ` Steve O'Neill
2002-01-31 22:28           ` Marin David Condic
2002-01-31 19:42       ` Marin David Condic
2002-01-31 18:41     ` Warren W. Gay VE3WWG
2002-01-31 19:52       ` Marin David Condic
2002-02-01 18:31         ` Warren W. Gay VE3WWG
2002-02-01 12:28     ` David Gillon
2002-02-01 21:02       ` Marin David Condic
2002-02-02  4:05         ` Adrian Hoe
2002-02-02 12:51           ` Jeffrey Creem
2002-02-04 15:58           ` Marin David Condic
2002-02-02  4:02       ` Adrian Hoe
2002-02-02 17:35         ` tmoran
2002-02-01  1:42 ` Randy Brukardt
2002-02-01 16:56   ` Nick Roberts
  -- strict thread matches above, loose matches on Subject: below --
2002-02-06  7:02 Christoph Grein
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox