Florian Weimer

Florian Weimer's contributions

GNU C library
Article

Recommended compiler and linker flags for GCC

Florian Weimer

Get a list of recommended build flags for compiling your C or C++ programs with the GCC compiler. Do you know which build flags you need to specify in order to obtain the same level of security hardening that GNU/Linux distributions such as Fedora and Red Hat Enterprise Linux use?

GNU C library
Article

Adding buffer overflow detection to string functions

Florian Weimer

This article describes the steps required to add buffer overflow protection to string functions. As a real-world example, we use the strlcpy function, which is implemented in the libbsd library on some GNU/Linux systems. This kind of buffer overflow protection uses a GNU Compiler Collection (GCC) feature for array size tracking (“source fortification”), accessed through the __builtin_object_size GCC built-in function. In general, these checks are added in a size-checking wrapper function around the original (wrapped) function, which is strlcpy in...

GNU C library
Article

Upgrading the GNU C Library within Red Hat Enterprise Linux

Florian Weimer

Occasionally, there's a need for a new GNU C Library for a given application to run. For example, some versions of the Google Chrome browser started to warn users on Red Hat Enterprise Linux 7 that future versions of Chrome would not support their operating system. The Chromium source code contained a version check, flagging all versions of the GNU C Library (glibc) older than 2.19 as obsolete. This check has since been relaxed to 2.17 (the version in Red...

Article Thumbnail
Article

Array allocation in C++

Florian Weimer

This technical article covers a subtlety in C++ array allocation and how we changed the GNU C++ compiler to deal with it properly. When a programmer writes T *p = new T[3]; the C++ compiler allocates room for at least three copies of objects of type T on the heap. These objects require 3 * sizeof(T) bytes. For this example, assume sizeof(T) is 12, then it is straightforward to allocate 36 bytes (for example, using malloc). But what happens if...