On Thu, Jun 15, 2023 at 11:36:21AM +0200, Stefan Fritsch wrote:
> >From FreeBSD commits
>
> commit c0db7289c3de290d821311942d5533f2284af77f
> Author: pfg <[email protected]>
> Date: Wed Aug 8 15:08:22 2018 +0000
>
> msdosfs: fixes for Undefined Behavior.
>
> and
>
> commit 852150953b828e4e8c32789637061001158a8cf4
> Author: kib <[email protected]>
> Date: Fri Oct 11 18:37:02 2019 +0000
>
> Plug the rest of undef behavior places that were missed in r337456.
>
>
> ok ?
OK bluhm@
> diff --git a/sys/msdosfs/msdosfs_fat.c b/sys/msdosfs/msdosfs_fat.c
> index d31abf7d11d..be23e161e29 100644
> --- a/sys/msdosfs/msdosfs_fat.c
> +++ b/sys/msdosfs/msdosfs_fat.c
> @@ -411,7 +411,7 @@ usemap_alloc(struct msdosfsmount *pmp, uint32_t cn)
> {
> KASSERT(cn <= pmp->pm_maxcluster);
>
> - pmp->pm_inusemap[cn / N_INUSEBITS] |= 1 << (cn % N_INUSEBITS);
> + pmp->pm_inusemap[cn / N_INUSEBITS] |= 1U << (cn % N_INUSEBITS);
> pmp->pm_freeclustercount--;
> }
>
> @@ -421,7 +421,7 @@ usemap_free(struct msdosfsmount *pmp, uint32_t cn)
> KASSERT(cn <= pmp->pm_maxcluster);
>
> pmp->pm_freeclustercount++;
> - pmp->pm_inusemap[cn / N_INUSEBITS] &= ~(1 << (cn % N_INUSEBITS));
> + pmp->pm_inusemap[cn / N_INUSEBITS] &= ~(1U << (cn % N_INUSEBITS));
> }
>
> int
> @@ -652,7 +652,7 @@ chainlength(struct msdosfsmount *pmp, uint32_t start,
> uint32_t count)
> idx = start / N_INUSEBITS;
> start %= N_INUSEBITS;
> map = pmp->pm_inusemap[idx];
> - map &= ~((1 << start) - 1);
> + map &= ~((1U << start) - 1);
> if (map) {
> len = ffs(map) - 1 - start;
> len = MIN(len, count);
> @@ -759,7 +759,7 @@ clusteralloc(struct msdosfsmount *pmp, uint32_t start,
> uint32_t count,
> for (cn = newst; cn <= pmp->pm_maxcluster;) {
> idx = cn / N_INUSEBITS;
> map = pmp->pm_inusemap[idx];
> - map |= (1 << (cn % N_INUSEBITS)) - 1;
> + map |= (1U << (cn % N_INUSEBITS)) - 1;
> if (map != (u_int)-1) {
> cn = idx * N_INUSEBITS + ffs(map^(u_int)-1) - 1;
> if ((l = chainlength(pmp, cn, count)) >= count)
> @@ -776,7 +776,7 @@ clusteralloc(struct msdosfsmount *pmp, uint32_t start,
> uint32_t count,
> for (cn = 0; cn < newst;) {
> idx = cn / N_INUSEBITS;
> map = pmp->pm_inusemap[idx];
> - map |= (1 << (cn % N_INUSEBITS)) - 1;
> + map |= (1U << (cn % N_INUSEBITS)) - 1;
> if (map != (u_int)-1) {
> cn = idx * N_INUSEBITS + ffs(map^(u_int)-1) - 1;
> if ((l = chainlength(pmp, cn, count)) >= count)