diff --git a/src/box/func.c b/src/box/func.c
index 63cadaea4a890f11b2fd37b0a3595535a2436ff8..b80ddb4710da67819290b0086c6391ea5218baec 100644
--- a/src/box/func.c
+++ b/src/box/func.c
@@ -381,7 +381,7 @@ schema_module_reload(const char *package, const char *package_end)
 }
 
 static struct func *
-func_c_new(struct func_def *def);
+func_c_new(const struct func_def *def);
 
 struct func *
 func_new(struct func_def *def)
@@ -422,7 +422,7 @@ func_new(struct func_def *def)
 }
 
 static struct func *
-func_c_new(MAYBE_UNUSED struct func_def *def)
+func_c_new(MAYBE_UNUSED const struct func_def *def)
 {
 	assert(def->language == FUNC_LANGUAGE_C);
 	assert(def->body == NULL && !def->is_sandboxed);
diff --git a/src/box/func_def.c b/src/box/func_def.c
index 41814350b244949175c3b24c8eac5d250fad8340..b2a41a4d2b9ebc7a0338741cbff1990bad6f6c5a 100644
--- a/src/box/func_def.c
+++ b/src/box/func_def.c
@@ -50,8 +50,8 @@ const struct opt_def func_opts_reg[] = {
 	OPT_DEF("takes_raw_args", OPT_BOOL, struct func_opts, takes_raw_args),
 };
 
-int
-func_opts_cmp(struct func_opts *o1, struct func_opts *o2)
+static int
+func_opts_cmp(const struct func_opts *o1, const struct func_opts *o2)
 {
 	if (o1->is_multikey != o2->is_multikey)
 		return o1->is_multikey - o2->is_multikey;
@@ -61,7 +61,7 @@ func_opts_cmp(struct func_opts *o1, struct func_opts *o2)
 }
 
 int
-func_def_cmp(struct func_def *def1, struct func_def *def2)
+func_def_cmp(const struct func_def *def1, const struct func_def *def2)
 {
 	if (def1->fid != def2->fid)
 		return def1->fid - def2->fid;
@@ -103,7 +103,7 @@ func_def_cmp(struct func_def *def1, struct func_def *def2)
  *            diagnostics message is provided
  */
 int
-func_def_check(struct func_def *def)
+func_def_check(const struct func_def *def)
 {
 	switch (def->language) {
 	case FUNC_LANGUAGE_C:
diff --git a/src/box/func_def.h b/src/box/func_def.h
index 22905618a709b4dbabb6f84649080951a7bdfa70..de1d2672cd4d9264630f3f8d7af5f5b3ad845ce5 100644
--- a/src/box/func_def.h
+++ b/src/box/func_def.h
@@ -163,15 +163,15 @@ func_def_sizeof(uint32_t name_len, uint32_t body_len, uint32_t comment_len,
 
 /** Compare two given function definitions. */
 int
-func_def_cmp(struct func_def *def1, struct func_def *def2);
+func_def_cmp(const struct func_def *def1, const struct func_def *def2);
 
 /** Duplicate a given function defintion object. */
 struct func_def *
-func_def_dup(struct func_def *def);
+func_def_dup(const struct func_def *def);
 
 /** Check if a non-empty function body is correct. */
 int
-func_def_check(struct func_def *def);
+func_def_check(const struct func_def *def);
 
 #ifdef __cplusplus
 }
diff --git a/src/box/lua/call.c b/src/box/lua/call.c
index 2013a61fc7e62c949be0f8201361f593b77a68b4..2d9eed327539177d556df60665c5e2083633fbf9 100644
--- a/src/box/lua/call.c
+++ b/src/box/lua/call.c
@@ -760,7 +760,7 @@ prepare_lua_sandbox(struct lua_State *L, const char *exports[],
  * On error, returns LUA_NOREF and sets diag.
  */
 static int
-func_persistent_lua_load(struct func_def *def)
+func_persistent_lua_load(const struct func_def *def)
 {
 	assert(def->body != NULL);
 	int func_ref = LUA_NOREF;
@@ -832,7 +832,7 @@ func_persistent_lua_load(struct func_def *def)
 }
 
 struct func *
-func_lua_new(struct func_def *def)
+func_lua_new(const struct func_def *def)
 {
 	assert(def->language == FUNC_LANGUAGE_LUA);
 	struct func_lua *func =
diff --git a/src/box/lua/call.h b/src/box/lua/call.h
index 83aa43949d7ac8002080c301bf5e106a7f0b7ff4..4302803ead33044a13f13a52cd1c8ab526e99e6e 100644
--- a/src/box/lua/call.h
+++ b/src/box/lua/call.h
@@ -60,7 +60,7 @@ box_lua_eval(const char *expr, uint32_t expr_len,
 
 /** Construct a Lua function object. */
 struct func *
-func_lua_new(struct func_def *def);
+func_lua_new(const struct func_def *def);
 
 #if defined(__cplusplus)
 } /* extern "C" */
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 42d825b0b1f453f1ea3a8b7bfb6a4b80122e3773..6970a1912ece7c1012bf600d0617e9c6750ab5f8 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -2354,7 +2354,7 @@ struct func_sql_expr {
 };
 
 struct func *
-func_sql_expr_new(struct func_def *def)
+func_sql_expr_new(const struct func_def *def)
 {
 	struct sql *db = sql_get();
 	const char *body = def->body;
diff --git a/src/box/sql/func.h b/src/box/sql/func.h
index 977a584e5f978a6dab4843e0dee8ba942d6830ad..374a5d83d3f5a6f7ebf01ef685b22b22958a394f 100644
--- a/src/box/sql/func.h
+++ b/src/box/sql/func.h
@@ -14,7 +14,7 @@ struct func_def;
 
 /** Create new SQL user-defined function. */
 struct func *
-func_sql_expr_new(struct func_def *def);
+func_sql_expr_new(const struct func_def *def);
 
 #if defined(__cplusplus)
 } /* extern "C" */