Kaynağa Gözat

Kernel: Stop supporting sprintf

The kernel no longer needs sprintf (which might, in theory, overflow),
so we can hide the C++ declaration and make the function uncallable
from within the kernel.

However, libstdc++ still links against it, as libstdc++ uses it for
demangling, from AK::demangle().
Ben Wiederhake 5 yıl önce
ebeveyn
işleme
1aad0f8b16
2 değiştirilmiş dosya ile 4 ekleme ve 1 silme
  1. 4 0
      Kernel/kprintf.cpp
  2. 0 1
      Kernel/kstdio.h

+ 4 - 0
Kernel/kprintf.cpp

@@ -133,6 +133,10 @@ static void buffer_putch(char*& bufptr, char ch)
     *bufptr++ = ch;
 }
 
+// Declare it, so that the symbol is exported, because libstdc++ uses it.
+// However, *only* libstdc++ uses it, and none of the rest of the Kernel.
+extern "C" int sprintf(char* buffer, const char* fmt, ...);
+
 int sprintf(char* buffer, const char* fmt, ...)
 {
     ScopedSpinLock lock(s_log_lock);

+ 0 - 1
Kernel/kstdio.h

@@ -33,7 +33,6 @@ int dbgprintf(const char* fmt, ...);
 int dbgputstr(const char*, int);
 int kernelputstr(const char*, int);
 int kprintf(const char* fmt, ...);
-int sprintf(char* buf, const char* fmt, ...);
 int snprintf(char* buf, size_t, const char* fmt, ...);
 void set_serial_debug(bool on_or_off);
 int get_serial_debug();