IAIK/sweb

RamFSInode kernel heap corruption write > 255

BotoX opened this issue · 6 comments

BotoX commented

https://github.com/IAIK/sweb/blob/master/common/source/fs/ramfs/RamFSInode.cpp
#define BASIC_ALLOC 256

int32 RamFSInode::writeData(uint32 offset, uint32 size, const char *buffer)
{
  if ((size + offset) > BASIC_ALLOC)
  {
    kprintfd("RamFSInode::ERROR: the size is bigger than size of the file\n");
    assert(true);
  }

sollte wohl assert(false) sein ^^^^

testcase im userspace welcher den kernel heap zerstört:

#define PAGE_SIZE 4096

int main()
{
  int fd = open("./test.txt", O_RDWR | O_CREAT);

  char buffer[PAGE_SIZE];
  for(int i = 0; i < sizeof(buffer); i++)
  {
    buffer[i] = i;
  }

  assert(write(fd, buffer, sizeof(buffer)) == sizeof(buffer));
  printf("[SUCCESS] Wrote %zu bytes\n", sizeof(buffer));

  return 0;
}

Gerade beim Abgabegespräch die Nerven geraubt :D

hmm, mal schauen... auch keine ideale lösung wenns den kernel crasht aber ein assert(false) würde ich schon mergen...

readData hat übrigens genau das selbe Problem

@BotoX Hast du noch vor da einen Pull-Request zu erstellen?

BotoX commented

Wenn dieser in der Form von assert(false) sein soll, dann kann ich das machen.
Das behebt jedoch das ursprüngliche Problem vom 256 Byte Limit nicht. Vielleicht möchte ja ein Student nächstes Semester diesen Bug fixen (dynamisch allozieren)

Okay, wollt nur nicht doppelt arbeiten. Hab jetzt den out-of-bounds memory access gefixt (die Größe ist aber noch immer limitiert).

Das Problem ist schon behoben. Issue kann geschlossen werden.