diff --git a/rts/IPE.c b/rts/IPE.c
index 0fbbfd1b5d4e1d58d2d38d94dcdba0743f122d05..b3e5edea88dcc88287479379173d0b7ef6640660 100644
--- a/rts/IPE.c
+++ b/rts/IPE.c
@@ -114,7 +114,7 @@ void dumpIPEToEventLog(void) {
     IpeBufferListNode *cursor = RELAXED_LOAD(&ipeBufferList);
     while (cursor != NULL) {
         IpeBufferEntry *entries;
-        char *strings;
+        const char *strings;
 
         // Decompress if compressed
         decompressIPEBufferListNodeIfCompressed(cursor, &entries, &strings);
@@ -190,7 +190,7 @@ void updateIpeMap(void) {
     while (pending != NULL) {
         IpeBufferListNode *current_node = pending;
         IpeBufferEntry *entries;
-        char *strings;
+        const char *strings;
 
         // Decompress if compressed
         decompressIPEBufferListNodeIfCompressed(current_node, &entries, &strings);
@@ -220,7 +220,7 @@ referenced by the 'entries_dst' and 'string_table_dst' parameters will point at
 the decompressed IPE data and string table for the given node, respectively,
 upon return from this function.
 */
-void decompressIPEBufferListNodeIfCompressed(IpeBufferListNode *node, IpeBufferEntry **entries_dst, char **string_table_dst) {
+void decompressIPEBufferListNodeIfCompressed(IpeBufferListNode *node, IpeBufferEntry **entries_dst, const char **string_table_dst) {
     if (node->compressed == 1) {
         // The IPE list buffer node indicates that the strings table and
         // entries list has been compressed. If zstd is not available, fail.
diff --git a/rts/IPE.h b/rts/IPE.h
index df1d01646f08461b7a0e2e93394098214e8a767c..9dbb4f1636959be0a4187b20e8166ee53a5d7524 100644
--- a/rts/IPE.h
+++ b/rts/IPE.h
@@ -17,6 +17,6 @@ void dumpIPEToEventLog(void);
 void updateIpeMap(void);
 void initIpe(void);
 void exitIpe(void);
-void decompressIPEBufferListNodeIfCompressed(IpeBufferListNode*, IpeBufferEntry**, char**);
+void decompressIPEBufferListNodeIfCompressed(IpeBufferListNode*, IpeBufferEntry**, const char**);
 
 #include "EndPrivate.h"
diff --git a/rts/include/rts/IPE.h b/rts/include/rts/IPE.h
index 8f732c9f9f9cd45b53c39d4d6d48675bb9a0c229..ca87aa840a953ec807e5471adee611a4d63a0fd0 100644
--- a/rts/include/rts/IPE.h
+++ b/rts/include/rts/IPE.h
@@ -76,12 +76,12 @@ typedef struct IpeBufferListNode_ {
 
     // When TNTC is enabled, these will point to the entry code
     // not the info table itself.
-    StgInfoTable **tables;
+    const StgInfoTable **tables;
 
     IpeBufferEntry *entries;
     StgWord entries_size; // decompressed size
 
-    char *string_table;
+    const char *string_table;
     StgWord string_table_size; // decompressed size
 } IpeBufferListNode;