Fix the last two CFI callback prototype mismatches

There was the series from me a year ago which fixed most of the
callback vs implementation prototype mismatches. It was based on
running the CFI-enabled kernel (in permissive mode -- warning
instead of panic) and performing a full ZTS cycle, and then fixing
all of the problems caught by CFI.
Now, Clang 16-dev has new warning flag, -Wcast-function-type-strict,
which detect such mismatches at compile-time. It allows to find the
remaining issues missed by the first series.
There are only two of them left: one for the
secpolicy_vnode_setattr() callback and one for taskq_dispatch().
The fix is easy, since they are not used anywhere else.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alexander Lobakin <alobakin@pm.me>
Closes #14207
This commit is contained in:
Alexander 2022-11-29 18:56:16 +01:00 committed by GitHub
parent 587a39b729
commit b5459dd354
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 6 additions and 6 deletions

View File

@ -219,7 +219,7 @@ extern int zfs_zaccess(struct znode *, int, int, boolean_t, cred_t *,
zuserns_t *); zuserns_t *);
int zfs_fastaccesschk_execute(struct znode *, cred_t *); int zfs_fastaccesschk_execute(struct znode *, cred_t *);
extern int zfs_zaccess_rwx(struct znode *, mode_t, int, cred_t *, zuserns_t *); extern int zfs_zaccess_rwx(struct znode *, mode_t, int, cred_t *, zuserns_t *);
extern int zfs_zaccess_unix(struct znode *, mode_t, cred_t *); extern int zfs_zaccess_unix(void *, int, cred_t *);
extern int zfs_acl_access(struct znode *, int, cred_t *); extern int zfs_acl_access(struct znode *, int, cred_t *);
int zfs_acl_chmod_setattr(struct znode *, zfs_acl_t **, uint64_t); int zfs_acl_chmod_setattr(struct znode *, zfs_acl_t **, uint64_t);
int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *, zuserns_t *); int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *, zuserns_t *);

View File

@ -2483,7 +2483,7 @@ zfs_zaccess_rwx(znode_t *zp, mode_t mode, int flags, cred_t *cr,
* Access function for secpolicy_vnode_setattr * Access function for secpolicy_vnode_setattr
*/ */
int int
zfs_zaccess_unix(znode_t *zp, mode_t mode, cred_t *cr) zfs_zaccess_unix(void *zp, int mode, cred_t *cr)
{ {
int v4_mode = zfs_unix_to_v4(mode >> 6); int v4_mode = zfs_unix_to_v4(mode >> 6);

View File

@ -2788,7 +2788,7 @@ zfs_zaccess_rwx(znode_t *zp, mode_t mode, int flags, cred_t *cr,
* Access function for secpolicy_vnode_setattr * Access function for secpolicy_vnode_setattr
*/ */
int int
zfs_zaccess_unix(znode_t *zp, mode_t mode, cred_t *cr) zfs_zaccess_unix(void *zp, int mode, cred_t *cr)
{ {
int v4_mode = zfs_unix_to_v4(mode >> 6); int v4_mode = zfs_unix_to_v4(mode >> 6);

View File

@ -2186,7 +2186,7 @@ top:
vap->va_mask &= ~trim_mask; vap->va_mask &= ~trim_mask;
} }
err = secpolicy_vnode_setattr(cr, ip, vap, &oldva, flags, err = secpolicy_vnode_setattr(cr, ip, vap, &oldva, flags,
(int (*)(void *, int, cred_t *))zfs_zaccess_unix, zp); zfs_zaccess_unix, zp);
if (err) if (err)
goto out3; goto out3;

View File

@ -429,7 +429,7 @@ txg_quiesce(dsl_pool_t *dp, uint64_t txg)
} }
static void static void
txg_do_callbacks(list_t *cb_list) txg_do_callbacks(void *cb_list)
{ {
dmu_tx_do_callbacks(cb_list, 0); dmu_tx_do_callbacks(cb_list, 0);
@ -479,7 +479,7 @@ txg_dispatch_callbacks(dsl_pool_t *dp, uint64_t txg)
list_move_tail(cb_list, &tc->tc_callbacks[g]); list_move_tail(cb_list, &tc->tc_callbacks[g]);
(void) taskq_dispatch(tx->tx_commit_cb_taskq, (task_func_t *) (void) taskq_dispatch(tx->tx_commit_cb_taskq,
txg_do_callbacks, cb_list, TQ_SLEEP); txg_do_callbacks, cb_list, TQ_SLEEP);
} }
} }