Greetings.
There is such a thing as a buffer overflow: we are overwriting the return address in the stack with some other one, which contains the instructions we want to execute. And most likely to the address that belongs to the stack segment (well, or heaps). Why does the processor, when EIP points to an address not from the code segment, do not panic and fail to produce a segmentation error? Is it not tracked by flags in the segment descriptor?
Wikipedia says that there is no such protection, but then a reasonable question arises, why?